Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式;只是小组,don';t捕获";,不';好像不行_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式;只是小组,don';t捕获";,不';好像不行

Javascript 正则表达式;只是小组,don';t捕获";,不';好像不行,javascript,regex,Javascript,Regex,x不应该是abef吗?不是,实际上是abcdef 为什么我的?:没有任何效果?(当然,我的理解很可能是错误的)(?:…)仍然匹配,它只是没有为\1/$1/.groups(1)/等目的创建新组。您的理解是错误的。该组仍将是主捕获的一部分,但不会算作子表达式捕获。以下内容将返回两个匹配项的数组: x = "abcdefg" x = x.match(/ab(?:cd)ef/) 数组索引0将是“abcdef”(完全匹配),数组索引1将是“cd”,即子表达式捕获。添加?:告诉正则表达式不要在意捕获子表达

x不应该是abef吗?不是,实际上是abcdef


为什么我的?:没有任何效果?(当然,我的理解很可能是错误的)

(?:…)
仍然匹配,它只是没有为
\1
/
$1
/
.groups(1)
/等目的创建新组。

您的理解是错误的。该组仍将是主捕获的一部分,但不会算作子表达式捕获。以下内容将返回两个匹配项的数组:

x = "abcdefg"
x = x.match(/ab(?:cd)ef/)
数组索引0将是“abcdef”(完全匹配),数组索引1将是“cd”,即子表达式捕获。添加
?:
告诉正则表达式不要在意捕获子表达式,完全匹配仍然被完全捕获

从你的其他评论来看,你有很多方法可以做你想做的事情。例如:

x = "abcdefg"
x = x.match(/ab(cd)ef/)

除了其他回复之外,如果您确实需要只匹配regex中的外部表达式,则必须执行以下操作:

x.replace(/(ab)cd(ef)/, "$1$2");
x.slice(0, x.indexOf("cd")) + x.slice(x.indexOf("cd") + 2);

但实际上regex并不适用于这种情况。

所以要实现我想要的,我必须做a=x.match(/(ab)(?:cd)(ef/);x=a[1]+a[2];对吗?@wizard:你可以这样做,是的,但是对于特定的表达式,不需要“无捕获”组
/(ab)cd(ef)/
也可以做同样的工作<代码>x.替换(/(ab)cd(ef)/,“$1$2”)会做得更好,但我想你的真实表达比你在这里的例子要复杂一点:-)。谢谢,同意你的观点,顺便说一句,我想你的意思是+而不是&啊,是的,我的错。太多的VB.Net。
x = "abcdefg"
xarr = x.match(/(ab)(?:cd)(ef)/)
x = xarr[1] + xarr[2]