[英]javascript regex match including non-capturing group
尝试我较早的stackoverflow问题(正则表达式非转义引号 )中的一个评论导致了一个新问题:
var string = 'hello"ther';
string.match(/(?:[^\\])"/);
// ["o"", index: 4, input: "hello"ther", groups: undefined]
匹配在"
之前包含o
,即使该组具有?:
我认为也使其无法捕获。
匹配项包括与RegExp 匹配的整个字符串。 非捕获组只是意味着它不会被识别为一个组,它将显示在“ groups
部分中,但仍会出现在匹配的字符串中。
换句话说,这是捕获组的结果:
var string = 'hello"ther';
console.log(string.match(/([^\\])"/));
// ["o\"","o"]
在这里,第一个元素是整个匹配的字符串(仍然相同,已捕获或未捕获)。 只是它也将“ o”捕获为一个单独的组,对于不适应的组则不是这样。
看来您正在尝试逃脱未逃脱的比赛。 如果您想这样做,可以这样做(使用捕获组 ):
string = string.replace(/([^\\])(")/, '$1\\$2')
第1组为[^\\\\]
,第2组为"
,方法是在其前面加一个斜杠。
编辑以进行澄清:这些组编号如下:
matches[0]
:整个匹配组 matches[1]
:第一个捕获的组 matches[2]
:第二个捕获组 判断是哪个组的一种简单方法是在组之前计算打开的捕获组括号。 例如,下面的正则表达式中的组($([\\d,]+)
:
/Total balance for (\w+): (($([\d,]+)\.(\d{2}))/
^ ^^ ^
1 23 4
是matches[3]
因为它是第三个开括号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.