如果我有一个正则表达式,比如 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/