我有这个字符串:"xvvv 123y"
我想测试replace
命令
所以我创建了:
"xvvv 123y".match(/(v+).+?([0-9]+)/)
结果:
["vvv 123", "vvv", "123"]
//让我们记住这个数组。
一切都好。
现在说我想将匹配的文字替换为组$1
==>
"xvvv 123y".replace(/(v+).+?([0-9]+)/,'$1')
结果:"xvvvy"
确定。
现在说我想将匹配的文字替换为组$2
==>
"xvvv 123y".replace(/(v+).+?([0-9]+)/,'$2')
结果:"x123y"
确定。
现在说我想将匹配的文字替换为组$0
==>
["vvv 123", "vvv", "123"]
^
|
I mean to -------------
"xvvv 123y".replace(/(v+).+?([0-9]+)/,'$0')
结果:"x$0y"
OOPSS?
为什么它不允许我将匹配的文本替换为第一个索引组?
如果我无法访问,它为什么会返回第一个元素?
答案 0 :(得分:3)
match
的返回值中的第一个元素是表示完全匹配的字符串。可以通过$&
:
"xvvv 123y".replace(/(v+).+?([0-9]+)/, '$&');
// Result: ""xvvv 123y"
答案 1 :(得分:0)
您可以创建一个新的匹配组:
"xvvv 123y".replace(/((v+).+?([0-9]+))/,'$1')
作为替代方案,您还可以使用替换函数
"xvvv 123y".replace(/(v+).+?([0-9]+)/,function(){
return arguments[0];
});
或者使用Rob的答案方法
"xvvv 123y".replace(/(v+).+?([0-9]+)/, '$&');