Bei der Arbeit mit regulären Ausdrücken (RegEx) ist es wichtig, die Auswirkungen verschiedener Flags auf das Matching-Verhalten zu verstehen. Ein rätselhaftes Problem entsteht, wenn die Flags „Global“ (g) und „Groß-/Kleinschreibung nicht beachtet“ (i) zusammen verwendet werden.
Das Problem:
Bedenken Sie den folgenden Code:
var query = 'Foo B'; var re = new RegExp(query, 'gi'); var result = []; result.push(re.test('Foo Bar')); result.push(re.test('Foo Bar'));
Erwartetes Ergebnis: [wahr, wahr]
Tatsächliches Ergebnis: [wahr, false]
Die Erklärung:
Das g-Flag in RegEx-Objekten ermöglicht die Fortsetzung des Abgleichs ab dem zuletzt gefundenen Index. Das bedeutet, dass, nachdem die erste Übereinstimmung gefunden wurde, nachfolgende Tests mit der Suche ab dem Zeichen fortfahren, das unmittelbar auf die vorherige Übereinstimmung folgt. Dieses Verhalten kann zu unerwarteten Ergebnissen führen, wenn Muster mehrere Instanzen derselben Teilzeichenfolge umfassen.
In unserem Beispiel erfolgt die erste Übereinstimmung beim ersten Zeichen von „Foo Bar“. Der zweite Test (ohne das g-Flag) startet den Abgleichsprozess jedoch vom Anfang der Zeichenfolge neu, was trotz der erwarteten Übereinstimmung bei der nächsten Instanz von „Foo“ zu einem falschen Ergebnis führt.
Auflösung das Problem:
Um dieses Problem zu mildern, sollten Sie die lastIndex-Eigenschaft des RegEx-Objekts verwenden, um den Startindex für jeden Test manuell zu steuern, wie im Folgenden dargestellt Beispiel:
var query = 'Foo B'; var re = new RegExp(query, 'gi'); console.log(re.lastIndex); console.log(re.test('Foo Bar')); console.log(re.lastIndex); re.lastIndex = 0; console.log(re.test('Foo Bar')); console.log(re.lastIndex);
Dieser Ansatz ermöglicht ein vorhersehbareres Übereinstimmungsverhalten und stellt sicher, dass das Muster jedes Mal anhand der gesamten Zeichenfolge ausgewertet wird.
Das obige ist der detaillierte Inhalt vonWarum führt die Kombination der Flags „g' und „i' in JavaScripts RegExp zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!