如果我有一个包含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,但示例中未明确说明或演示任何内容。
最佳答案
接得好!我唯一能想到的解决方案是:
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
构造(用于“组”),您可以在替换字符串中使用类似\g{1}3
的名称;但是JavaScript仅使用$nn
。也就是说,如果您有9个以上的捕获组,则可以使用两位数的反向引用来消除歧义,如下所示:"one2345678910111213".replace(regex, "$013" );
关于Javascript反向引用后跟数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13248365/