Dynamische reguläre Ausdrücke mit Variablen in JavaScript
Die regulären Ausdrücke von JavaScript bieten ein leistungsstarkes Werkzeug für den Mustervergleich und die Musterbearbeitung. Das Einfügen von Variablen in diese Muster kann jedoch eine Herausforderung sein.
Bedenken Sie den folgenden Codeausschnitt:
function(input) { var testVar = input; string = ... string.replace(/ReGeX + testVar + ReGeX/, "replacement") }
Dieser Code versucht, alle Vorkommen eines bestimmten Musters in einer Zeichenfolge durch ein bereitgestelltes zu ersetzen Ersatzsaite. Dies schlägt jedoch fehl, da Sie eine Variable nicht direkt innerhalb eines regulären Ausdrucks verketten können.
Lösung: Verwendung von Vorlagenzeichenfolgen
In ES6-JavaScript können Sie Vorlagenzeichenfolgen verwenden um dynamisch einen regulären Ausdruck mit einer Variablen zu erstellen. So würden Sie es machen:
const regex = new RegExp(`ReGeX${testVar}ReGeX`); ... string.replace(regex, "replacement");
In diesem Beispiel akzeptiert der RegExp-Konstruktor eine Vorlagenzeichenfolge als erstes Argument. Die Vorlagenzeichenfolge enthält das ursprüngliche reguläre Ausdrucksmuster mit der interpolierten Variablen testVar. Die Backticks (``) weisen auf eine Vorlagenzeichenfolge hin.
ES6 vs. Pre-ES6
Vor ES6 mussten Sie eine ausführlichere Methode verwenden, um dasselbe zu erreichen Ergebnis:
var regex = new RegExp("ReGeX" + testVar + "ReGeX"); ... string.replace(regex, "replacement");
Die ältere Syntax funktioniert immer noch, aber die Template-String-Methode wird wegen ihrer Einfachheit und bevorzugt Lesbarkeit.
Achtung: Variablen maskieren
Es ist wichtig zu beachten, dass Sie maskieren sollten, wenn die Variable, die Sie einfügen, potenziell schädlichen Inhalt hat (z. B. Benutzereingaben). es, um Injektionsattacken vorzubeugen. Zum Escapen können die Funktionen escape() oder encodeURIComponent() verwendet werden.
Das obige ist der detaillierte Inhalt vonWie kann ich reguläre Ausdrücke mit Variablen in JavaScript dynamisch erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!