Javascript 反向引用后跟数字

标签 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,但示例中没有明确说明或演示任何内容。

最佳答案

抓得好!我能想到的唯一解决方案是:

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/

相关文章:

javascript - 是否可以通过一些在线工具将java转换为java脚本?

javascript - 针对不同的开闭条件重用 RegExp 子模式?

C++ 正则表达式不适用于 PCRE 表达式?

javascript - JSON 和反斜杠

javascript - Node Javascript 的这一行条件有什么问题?

javascript - 抽象出 html/css 的低级 javascript 框架?

c# - 匹配 .net 正则表达式中的单个字符

javascript - 如何对javascript中的字符串进行数字排序

regex - sed 从字符串中提取版本号(只有版本,没有其他数字)

javascript - 选择包含数字的第一个元素 - 2014