正则表达式,"只是组,不捕获",似乎不起作用

Mur*_*ali 16 javascript regex

x = "abcdefg"
x = x.match(/ab(?:cd)ef/)
Run Code Online (Sandbox Code Playgroud)

不应该是什么?它不是,它实际上是abcdef

为什么我的?:没有任何影响?(当然我的理解很可能是错的)

Ign*_*ams 26

(?:...)仍然匹配,它只是不为\1/ $1/ .groups(1)/ etc 创建一个新组.

  • @wizard:你可以这样做,是的,但是那个特定的表达式不需要非捕获组.`/(ab)cd(ef)/`会做同样的工作.`x.replace(/(ab)cd(ef)/,"$ 1 $ 2");`会做得更好,但我想你的真实表达比你这里的例子复杂一点:-). (3认同)

And*_*y E 5

你的理解是错误的.该组仍然是主要捕获的一部分,但它不会被视为子表达式捕获.以下将返回两个匹配的数组:

x = "abcdefg"
x = x.match(/ab(cd)ef/)
Run Code Online (Sandbox Code Playgroud)

数组索引0将是"abcdef"(完全匹配),数组索引1将是"cd",即子表达式捕获.添加?:告诉正则表达式不关心捕获子表达式,完全匹配仍然完全捕获.

根据您的其他评论,您可以通过多种方式完成您要做的事情.例如:

x.replace(/(ab)cd(ef)/, "$1$2");
x.slice(0, x.indexOf("cd")) + x.slice(x.indexOf("cd") + 2);
Run Code Online (Sandbox Code Playgroud)