繁体   English   中英

javascript正则表达式匹配项,包括非捕获组

[英]javascript regex match including non-capturing group

尝试我较早的stackoverflow问题(正则表达式非转义引号 )中的一个评论导致了一个新问题:

var string = 'hello"ther';
string.match(/(?:[^\\])"/);
// ["o"", index: 4, input: "hello"ther", groups: undefined]

匹配在"之前包含o ,即使该组具有?:我认为也使其无法捕获。

https://regex101.com/r/VCt1Ye/5

匹配项包括与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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM