Biorąc pod uwagę tę funkcję:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(pattern, value);
}
};
return repeater;
};
Jak dokonać this.markup.replace()
wymiany na całym świecie? Oto problem. Jeśli używam go w ten sposób:
alert(new Repeater("$TEST_ONE $TEST_ONE").replace("$TEST_ONE", "foobar").markup);
Wartość alertu to „foobar $ TEST_ONE”.
Jeśli zmienię Repeater
na następujące, nic nie zostanie zastąpione w Chrome:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(new RegExp(pattern, "gm"), value);
}
};
return repeater;
};
... a alert jest $TEST_ONE $TEST_ONE
.
javascript
regex
replace
rdzeń
źródło
źródło
/pattern/
lubnew RegExp("pattern")
.Pod względem interpretacji wzorców nie ma różnicy między następującymi formami:
/pattern/
new RegExp("pattern")
Jeśli chcesz zamienić dosłowny ciąg przy użyciu tej
replace
metody, myślę, że możesz po prostu przekazać ciąg zamiast wyrażenia regularnego doreplace
.W przeciwnym razie musiałbyś najpierw uciec od wszelkich znaków specjalnych wyrażenia regularnego we wzorcu - może tak:
źródło
Twój wzorzec wyrażenia regularnego powinien mieć modyfikator g:
zwróć uwagę na g na końcu. nakazuje zamiennikowi wykonanie globalnej zamiany.
Nie musisz też używać obiektu RegExp, możesz skonstruować wzorzec jak powyżej. Przykładowy wzór:
wzorzec jest zawsze otoczony przez / z każdej strony - z modyfikatorami po ostatnim /, przy czym modyfikator g jest globalny.
EDYCJA: Dlaczego ma znaczenie, czy wzorzec jest zmienną? W twoim przypadku działałoby to tak (zauważ, że wzorzec jest nadal zmienną):
Ale musiałbyś zmienić swoją funkcję zamiany na następującą:
źródło