在Regex中缺少团队?

时间:2012-11-22 13:41:33

标签: javascript regex

我有这个字符串:"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?

为什么它不允许我将匹配的文本替换为第一个索引组?

修改

如果我无法访问,它为什么会返回第一个元素?

2 个答案:

答案 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]+)/, '$&');