Heim > Web-Frontend > js-Tutorial > Warum führt die Kombination der Flags „g' und „i' in JavaScripts RegExp zu unerwarteten Ergebnissen?

Warum führt die Kombination der Flags „g' und „i' in JavaScripts RegExp zu unerwarteten Ergebnissen?

Susan Sarandon
Freigeben: 2024-12-28 10:02:27
Original
355 Leute haben es durchsucht

Why Does Combining the `g` and `i` Flags in JavaScript's RegExp Produce Unexpected Results?

RegExp: Der Fall der unerwarteten Flag-Kombination

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'));
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage