尝试我之前的stackoverflow问题(Regex non-escaped quotation marks)中的一条评论导致了一个新问题:
var string = 'hello"ther';
string.match(/(?:[^\\])"/);
// ["o"", index: 4, input: "hello"ther", groups: undefined]
该匹配包括 "
之前的 o
,即使该组具有 ?:
,我认为它是非捕获的 .
尝试我之前的stackoverflow问题(Regex non-escaped quotation marks)中的一条评论导致了一个新问题:
var string = 'hello"ther';
string.match(/(?:[^\\])"/);
// ["o"", index: 4, input: "hello"ther", groups: undefined]
该匹配包括 "
之前的 o
,即使该组具有 ?:
,我认为它是非捕获的 .
1 回答
匹配包括与RegExp匹配的整个字符串 . 非捕获组只是意味着它不会被识别为一个组,它将显示在
groups
部分中,但它仍将出现在匹配的字符串中 .换句话说,这是捕获组的结果:
这里,第一个元素是整个匹配的字符串(仍然相同,捕获或未捕获) . 它只是将“o”作为一个单独的组捕获,对于一个非捕获组而言并非如此 .
看起来你正试图逃避非转义的比赛 . 如果你想这样做,你可以这样做(使用捕获组):
第1组是
[^\\]
,第2组是"
,在它前面放一个斜杠 .编辑以供澄清:组编号如下:
matches[0]
:整个匹配组matches[1]
:第一个被捕获的组matches[2]
:第二个被捕获的组......
告诉哪个组是一个简单的方法是在组之前计算开始捕获组括号 . 例如,下面的正则表达式中的组
($([\d,]+)
:是
matches[3]
因为它是第三个左括号 .