Angesichts dieser Funktion:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(pattern, value);
}
};
return repeater;
};
Wie kann ich this.markup.replace()
global ersetzen? Hier ist das Problem. Wenn ich es so benutze:
alert(new Repeater("$TEST_ONE $TEST_ONE").replace("$TEST_ONE", "foobar").markup);
Der Wert der Warnung lautet "foobar $ TEST_ONE".
Wenn ich Repeater
zu Folgendem wechsle , wird in Chrome nichts ersetzt:
function Repeater(template) {
var repeater = {
markup: template,
replace: function(pattern, value) {
this.markup = this.markup.replace(new RegExp(pattern, "gm"), value);
}
};
return repeater;
};
... und der Alarm ist $TEST_ONE $TEST_ONE
.
quelle
/pattern/
oder verwendennew RegExp("pattern")
.In Bezug auf die Musterinterpretation gibt es keinen Unterschied zwischen den folgenden Formen:
/pattern/
new RegExp("pattern")
Wenn Sie
replace
eine Literalzeichenfolge mit der Methode ersetzen möchten, können Sie meiner Meinung nach einfach eine Zeichenfolge anstelle eines regulären Ausdrucks an übergebenreplace
.Andernfalls müssten Sie zuerst alle regulären Ausdruckszeichen im Muster maskieren - vielleicht so:
quelle
Ihr Regex-Muster sollte den Modifikator g haben:
Beachten Sie das g am Ende. Es weist den Ersetzer an, einen globalen Ersatz durchzuführen.
Außerdem müssen Sie das RegExp-Objekt nicht verwenden. Sie können Ihr Muster wie oben erstellen. Beispielmuster:
Ein Muster ist immer von / auf beiden Seiten umgeben - mit Modifikatoren nach dem letzten /, wobei der Modifikator g der globale ist.
EDIT: Warum ist es wichtig, wenn Muster eine Variable ist? In Ihrem Fall würde es so funktionieren (beachten Sie, dass das Muster immer noch eine Variable ist):
Sie müssten jedoch Ihre Ersetzungsfunktion folgendermaßen ändern:
quelle