如果我有一个包含 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 并且不包含硬编码文字。
还看了docsMDN 上,但示例中没有明确说明或演示任何内容。
接得好!我能想到的唯一解决方案是:
var regex = /(one)(2)(3)(4)(5)(6)(7)(8)(9)(10)(11)(12)(13)/;
"one2345678910111213".replace(regex, function(match, $1) { return $1 + "3"; } );
EDIT我查了一下ECMAScript 规范看起来这不需要回调也是可能的。一些 RegExp 替换引擎——例如 Python——有一个\g
构造(对于“组”),您可以在其中使用类似的东西\g{1}3
在替换字符串中;但 JavaScript 只是使用$nn
。也就是说,如果您有超过 9 个捕获组,则可以使用两位数的反向引用来消除歧义,如下所示:
"one2345678910111213".replace(regex, "$013" );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)