如何在执行JavaScript正则表达式替换时转义捕获组$ N后跟整数?

时间:2013-11-07 17:04:18

标签: javascript regex replace

据我所知,在JavaScript中,您可以执行正则表达式替换,并引用捕获组,如下所示:

> "Hello World 1234567890".replace(
        /Hello (World) (1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/,
        "What's up $1");
"What's up World"

这一切都很好。但是,如果我想引用第1组然后立即跟随“1”,该怎么办?说我看什么“世界上有什么1”。所以我写道:

> "Hello World 1234567890".replace(
        /Hello (World) (1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/,
        "What's up $11");
"What's up 0"

当然,在这种情况下,它引用的是第11组,即“0”,而不是第1组,后跟“1”。

我怎样才能解决这种歧义?

2 个答案:

答案 0 :(得分:5)

您可以将String#replace与回调函数参数一起使用:

str = "Hello World 1234567890";
repl = str.replace(/Hello (World) (1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/, function(r, g) {
      return "What's up " + g + '1';});

//=> What's up World1

答案 1 :(得分:1)

不要那样做^^:

(1 + "Hello World 1234567890").replace(
    /(\d)Hello (World) (1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/,
    "What's up $2$1"
);