Javascript反向引用后跟数字

Asa*_*din 10 javascript regex

如果我有一个正则表达式,例如13个捕获组,我将如何指定包含第一个反向引用后跟文字"3"的替换字符串?

var regex = /(one)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)/;
"one2345678910111213".replace(regex,"$13");
//Returns "13". How do I return "one3"?
Run Code Online (Sandbox Code Playgroud)

我能找到的最接近的问题是这个,但它与perl有关,并且不包括硬编码的文字.

另外还看了MDN 上的文档,但是在示例中没有明确说明或演示过.

Xop*_*ter 12

接得好!我能想出的唯一解决方案是:

var regex = /(one)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)/;
"one2345678910111213".replace(regex, function(match, $1) { return $1 + "3"; } );
Run Code Online (Sandbox Code Playgroud)

编辑我查找了ECMAScript规范,看起来这可能没有回调.一些RegExp替换引擎 - 例如Python - 有一个\g构造(用于"组"),你可以\g{1}3在替换字符串中使用类似的东西; 但JavaScript只是使用$nn.也就是说,如果您有超过9个捕获组,则可以使用两位数的后向引用来消除歧义,如下所示:

"one2345678910111213".replace(regex, "$013" );
Run Code Online (Sandbox Code Playgroud)


Nat*_*ook 5

只是添加一个简明的答案以供将来参考:

反向引用最多有两位数,因此要使用反向引用#1后跟一个文字数字,将其称为"01"而不是"1":

"one2345678910111213".replace(regex,"$013");
Run Code Online (Sandbox Code Playgroud)