正则表达式在捕获组后替换为数字?

问题描述 投票:0回答:3

我有一个像这样的正则表达式模式:

([0-9]*)xyz

我希望像这样进行替换:

$10xyz

问题是

$1
是一个捕获组,而
0
只是我想放入替换中的数字。但正则表达式认为我要求捕获组
$10
而不是
$1
,然后在其后面加一个零。

如何引用捕获组并立即在其后跟上数字?

在本例中使用 JavaScript。

更新 正如下面指出的,我的代码运行良好。我使用的正则表达式测试器被意外设置为 PCRE 而不是 JavaScript。

regex
3个回答
5
投票

您的代码确实运行得很好。在 JavaScript 正则表达式替换语法中,

$10
引用捕获组
10
。但是,如果尚未设置组
10
,则会插入组
1
,然后插入文字
0

var r = '123xyz'.replace(/([0-9]*)xyz/, '$10xyz');
console.log(r); //=> "1230xyz"

1
投票

你的代码确实可以工作,除非我遗漏了一些东西:

var str = "3xyz";
var str1 = str.replace(/([0-9]*)xyz/, "$10xyz");
alert(str1); // alerts 30xyz

0
投票

虽然这可能适用于 Javascript 正则表达式,但它仍然不适用于 PCRE

如果有人需要 PCRE 解决方案,您可以使用

${1}0xyz

或者只使用命名的捕获组

  • 使用
    (?<num>[0-9]*)xyz
  • 进行拍摄
  • 然后替换为
    ${num}0xyz
© www.soinside.com 2019 - 2024. All rights reserved.