10

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」が続きます。「What's up World1」って何を見ようって言うんだ。だから私は書くだろう:

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

もちろん、この場合、グループ 1 の後に "1" が続くのではなく、"0" であるグループ 11 を参照しています。

このあいまいさをどのように解決できますか?

4

2 に答える 2

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
于 2013-11-07T17:09:05.523 に答える
1

そんなことしないで^^:

(1 + "Hello World 1234567890").replace(
    /(\d)Hello (World) (1)(2)(3)(4)(5)(6)(7)(8)(9)(0)/,
    "What's up $2$1"
);
于 2013-11-07T17:50:23.703 に答える