下面是我的字符串替换代码:
var input = "player @renish Score";
var matches = input.replace(/@\w*/g,'$1 55');
输出
player $1 55 Score
我希望输出像
player @renish 55 Score
答案 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)
您需要使用()
指定正则表达式的哪一部分是您的捕获组:
var input = "player @renish Score";
var matches = input.replace(/(@\w*)/g,'$1 55');
alert(matches)
&#13;
否则,replace
会将"$1"
放入您的字符串中,因为您还没有指定捕获组。
答案 2 :(得分:1)
您需要使用$&
引用整个匹配,不需要捕获组:
var input = "player @renish Score";
alert(input.replace(/@\w*/g,'$& 55'));
请参阅MDN reference:
$&
插入匹配的子字符串。
请注意,只有在您只需要引用某个子模式时才能执行添加捕获组。其他捕获组意味着额外的开销。