尝试我之前堆栈溢出问题中的一个评论(正则表达式非转义引号(导致了一个新问题:
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]
,因为它是第三个左括号。