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" OOPSS?

一致するテキストを最初のインデックスグループに置き換えることができないのはなぜですか?

編集

また、アクセスできない場合に最初の要素が返されるのはなぜですか?

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];
});

または、ロブの回答方法を使用します

"xvvv 123y".replace(/(v+).+?([0-9]+)/, '$&');
于 2012-11-22T13:44:48.120 に答える