RegExp替换函数中的反向引用不起作用
Backreference in RegExp replace function not working
下面是我的字符串替换代码:
var input = "player @renish Score";
var matches = input.replace(/@'w*/g,'$1 55');
输出为
player $1 55 Score
我想要像一样的输出
player @renish 55 Score
$1
被称为反向引用,只有当存在有效的捕获组时它才会有效。
引用MDN的分组和反向参考部分,
(x)
匹配
x
并记住匹配。这些被称为捕获圆括号。例如,
/(foo)/
匹配并记住"foo bar"
中的"foo"
。匹配的子串可以从结果数组的元素[1], ..., [n]
或从预定义的RegExp
对象的属性$1, ..., $9
中调用。你需要引入一个捕获组,比如这个
console.log(input.replace(/(@'w*)/g,'$1 55'));
现在,我们捕获字符串@'w*
,而$1
将表示捕获的字符串。
或者,根据String.prototype.replace
的ECMA脚本5.1规范,可以使用$&
来表示匹配的字符串。
$&
匹配的子字符串。
因此,您可以按原样使用代码,只需将替换模式更改为$&
,就像这个一样
console.log(input.replace(/@'w*/g,'$& 55'));
您需要使用()
:指定正则表达式的哪一部分是捕获组
var input = "player @renish Score";
var matches = input.replace(/(@'w*)/g,'$1 55');
alert(matches)
否则,replace
将把"$1"
放到字符串中,因为您还没有指定捕获组。
您需要使用$&
引用整个匹配,无需捕获组:
var input = "player @renish Score";
alert(input.replace(/@'w*/g,'$& 55'));
参见MDN参考:
$&
nbsp 插入匹配的子字符串。
请注意,只有当您只需要引用某些子模式时,才应该执行添加捕获组。额外的捕获组意味着额外的开销。
相关文章:
- 如果视图中没有Jquery脚本引用,Unobtrusive Javascript Validation是不起作用的
- ng-view 中的脚本在从文件引用时不起作用(JQuery 在角度之前加载)
- 对jquery函数的引用不起作用
- Twitter引导程序弹出在网站上不起作用:未获取引用错误
- EJS文件中的Javascript引用在Webstorm上不起作用
- 通过引用进行的Javascript调用不起作用
- 引用 jQuery UI 不起作用
- Jquery 选项卡不起作用或引用错误
- 循环引用似乎在事件处理程序函数中不起作用
- Jquery 和闭包或函数引用不起作用
- 为什么我的deffered()函数不起作用,除非我引用它的另一个变量
- 跟踪像素应该通过引用页面加载外部网站 - 但它不起作用
- XHR 上传功能的单例引用不起作用
- 选择器 $(body) 有效但破坏了代码(引用错误),而 $(“body”) 没有显示错误但不起作用
- Angular:脚本引用不起作用
- AngularJS -控制器函数顺序-一些引用不起作用
- 为什么我的jQuery引用不起作用?我引用的脚本不正确
- Javascript:没有子级的脚本引用不起作用
- RegExp替换函数中的反向引用不起作用
- 对此的引用不起作用