Javascript反向引用后跟数字

时间:2012-11-06 09:46:34

标签: 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"?

我能找到的最接近的问题是this one,但它与perl有关,并且不包含硬编码的文字。

另请参阅MDN上的docs,但示例中没有明确说明或演示过。

2 个答案:

答案 0 :(得分: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"; } );

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

"one2345678910111213".replace(regex, "$013" );

答案 1 :(得分:5)

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

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

"one2345678910111213".replace(regex,"$013");