2

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

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

编辑

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

4

2 回答 2

3

返回值中的第一个元素match是表示完全匹配的字符串。该值可通过以下方式访问$&

"xvvv 123y".replace(/(v+).+?([0-9]+)/, '$&');
// Result: ""xvvv 123y"
于 2012-11-22T13:47:18.137 回答
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]+)/, '$&');
于 2012-11-22T13:44:48.120 回答