如果我有一个正则表达式,例如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)
只是添加一个简明的答案以供将来参考:
反向引用最多有两位数,因此要使用反向引用#1后跟一个文字数字,将其称为"01"而不是"1":
"one2345678910111213".replace(regex,"$013");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |