0

正規表現の配列があり、現時点では長さが 1 つの要素と、配列をループして検索/置換したい文字列があります。

var str = "i am*happy all the*time",
    rex = [
        /(\S)\s*\*\s*(\S)/g
        ],
    i = 0,
    r = rex.length;

これは私が現時点でこれを達成しようとしている方法です:

for (i; i < r; i += 1) {
    str.replace(rex[i], function(star, p1, p2) {
        console.log(i, star, p1, p2);
        return p1 + '\\s*(.*)\\s*' + p2;
    });
}

結果は になりますi am*\\s*(.*)\\s*happy all the\\s*(.*)\\s*timestrしかし、コンソールを確認すると、関連する一致が行われていますが、現時点では影響を受けていないようです。これは、ここで確認できます。

だから私は単純なものを見逃していますか、String.replace() でラムダ式を使用することについて何か誤解していますか、それとももっと根本的に間違っていることがありますか?

...

追加情報: 興味がある場合に備えて、現在 Chrome 24 を使用しています。少し前に、String.replace() の匿名関数がすべてのブラウザーで使用できるわけではないことを読みましたが、今では解決されると思いました (このオプションは ECMAScript v3 で導入されました)。

4

1 に答える 1

1

String.replace()元の文字列は変更しませんが、新しい文字列を返します。結果を割り当てる必要があります

for (i; i < r; i += 1) {
    str = str.replace(rex[i], function(star, p1, p2) {...})
}
于 2013-02-23T12:31:04.927 に答える