0

文字列内の多くのキーワードを事前定義された変数に置き換えたいのですが、以下のサンプルがありますが、$1 には変数の内容ではなく変数名のみが表示されます。だれでも助けてください!!!

正しい:

1111{t:aa}
2222{t:bb}
3333{t:cc}

に:

1111テスト 1 2222
テスト 2 3333テスト 3

いいえ:

1111aa
2222bb
3333cc

コード:

var aa = "Test1";
var bb = "Test2";
var cc = "Test3";
var str_before = "1111{t:aa}\n2222{t:bb}\n3333{t:cc}";
var str_after = str_before.replace(/\{t:\s*(\w+)\}/g, "$1");
alert(str_before+"\n\n"+str_after);
4

2 に答える 2

2

regexp 定数 (つまり/.../構文) は変数を直接参照できません。

別の解決策は、.replace関数のコールバック パラメータを使用することです。

var map = {
    aa: 'Test1',
    bb: 'Test2',
    cc: 'Test3'
};

var str_before = "1111{t:aa}\n2222{t:bb}\n3333{t:cc}";
var str_after = str_before.replace(/{t:(\w+)}/g, function(match, p1) {
    return map.hasOwnProperty(p1) ? map[p1] : '';
});

これにはさらに、名前から値へのマッピングが簡単に構成できるという利点があり、それぞれに対して個別に変数を宣言する必要はありません。

于 2013-09-24T15:09:24.933 に答える