RegExp中的反向引用替换功能不起作用

时间:2015-07-02 13:52:27

标签: javascript regex

下面是我的字符串替换代码:

var input = "player @renish Score";
var matches = input.replace(/@\w*/g,'$1 55');

输出

player $1 55 Score

我希望输出像

player @renish 55 Score

3 个答案:

答案 0 :(得分:2)

$1被称为反向引用,只有在有效的捕获组时它才有效。

引用MDN' Grouping and back references部分

  

<强> (x)

     

匹配x并记住匹配。这些被称为捕获括号

     

例如,/(foo)/匹配并记住"foo"中的"foo bar"。可以从结果数组的元素[1], ..., [n]或预定义的RegExp对象的属性$1, ..., $9中调用匹配的子字符串。   你需要引入一个捕获组,比如这个

console.log(input.replace(/(@\w*)/g,'$1 55'));

现在,我们捕获字符串@\w*$1将代表捕获的字符串。

或者,根据ECMA Script 5.1 Specification for String.prototype.replace,您可以使用$&来表示匹配的字符串。

  

<强> $&

     

匹配的子字符串。

因此,您可以按原样使用代码,只需将替换模式更改为$&,就像这样

console.log(input.replace(/@\w*/g,'$& 55'));

答案 1 :(得分:1)

您需要使用()指定正则表达式的哪一部分是您的捕获组:

&#13;
&#13;
var input = "player @renish Score";
var matches = input.replace(/(@\w*)/g,'$1 55');
alert(matches)
&#13;
&#13;
&#13;

否则,replace会将"$1"放入您的字符串中,因为您还没有指定捕获组。

答案 2 :(得分:1)

您需要使用$&引用整个匹配,不需要捕获组:

var input = "player @renish Score";
alert(input.replace(/@\w*/g,'$& 55'));

请参阅MDN reference

  

$&插入匹配的子字符串。

请注意,只有在您只需要引用某个子模式时才能执行添加捕获组。其他捕获组意味着额外的开销。

相关问题