Diberikan fungsi ini:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(pattern, value);
}
};
return repeater;
};
Bagaimana cara saya melakukan this.markup.replace()
penggantian secara global? Inilah masalahnya. Jika saya menggunakannya seperti ini:
alert(new Repeater("$TEST_ONE $TEST_ONE").replace("$TEST_ONE", "foobar").markup);
Nilai lansiran adalah "foobar $ TEST_ONE".
Jika saya mengubah Repeater
ke yang berikut, maka tidak ada yang diganti di Chrome:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(new RegExp(pattern, "gm"), value);
}
};
return repeater;
};
... dan peringatannya adalah $TEST_ONE $TEST_ONE
.
sumber
/pattern/
ataunew RegExp("pattern")
.Dalam hal interpretasi pola, tidak ada perbedaan antara bentuk-bentuk berikut:
/pattern/
new RegExp("pattern")
Jika Anda ingin mengganti string literal menggunakan
replace
metode ini, saya pikir Anda bisa meneruskan string alih-alih regexp kereplace
.Jika tidak, Anda harus melepaskan karakter khusus regexp dalam pola terlebih dahulu - mungkin seperti ini:
sumber
Pola regex Anda harus memiliki pengubah g:
perhatikan g di bagian akhir. itu memberi tahu pengganti untuk melakukan penggantian global.
Anda juga tidak perlu menggunakan objek RegExp, Anda dapat membuat pola seperti di atas. Contoh pola:
sebuah pola selalu diapit oleh / di kedua sisi - dengan pengubah setelah akhir /, pengubah g menjadi global.
EDIT: Mengapa penting jika pola adalah variabel? Dalam kasus Anda, ini akan berfungsi seperti ini (perhatikan bahwa pola masih berupa variabel):
Tapi Anda perlu mengubah fungsi replace Anda menjadi ini:
sumber