Heim >Web-Frontend >js-Tutorial >Warum gibt die Methode „test()' von RegExp unerwartete Ergebnisse mit globalen Flags und Flags ohne Berücksichtigung der Groß- und Kleinschreibung zurück?

Warum gibt die Methode „test()' von RegExp unerwartete Ergebnisse mit globalen Flags und Flags ohne Berücksichtigung der Groß- und Kleinschreibung zurück?

Barbara Streisand
Barbara StreisandOriginal
2024-12-24 20:37:17298Durchsuche

Why Does RegExp's `test()` Method Return Unexpected Results with Global and Case-Insensitive Flags?

RegExp mit Global Flag und Flag ohne Berücksichtigung der Groß- und Kleinschreibung führt zu unerwarteten Ergebnissen

Frage:

Bei Verwendung eines regulären Ausdrucks mit dem Warum liefert die Testmethode aufgrund des globalen Flags (g) und des Flags ohne Berücksichtigung der Groß- und Kleinschreibung (i) falsche Ergebnisse für benutzergenerierte Ergebnisse? Eingabe?

Beispiel:

Betrachten 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'));
// result will be [true, false]

Erwartetes Ergebnis: [true, true]

Erklärung:

Ein RegExp-Objekt mit dem g-Flag verwaltet die lastIndex-Eigenschaft, die die Position der letzten Übereinstimmung angibt. Wenn die Testmethode wiederholt aufgerufen wird, ohne lastIndex zurückzusetzen, wird die Suche ab dem zuletzt verwendeten Index fortgesetzt, anstatt bei 0 zu beginnen.

Demonstration:

var query = 'Foo B';
var re = new RegExp(query, 'gi');
console.log(re.lastIndex); // 0

console.log(re.test('Foo Bar')); // true
console.log(re.lastIndex); // 6

console.log(re.test('Foo Bar')); // false
console.log(re.lastIndex); // 6

Im obigen Beispiel setzt der erste Aufruf von test lastIndex auf 6. Anschließend setzt der zweite Aufruf die Suche ab Index 6 fort, was zu „false“ führt, da der Suchbereich auf die Zeichen nach dem beschränkt ist letztes Spiel.

Das obige ist der detaillierte Inhalt vonWarum gibt die Methode „test()' von RegExp unerwartete Ergebnisse mit globalen Flags und Flags ohne Berücksichtigung der Groß- und Kleinschreibung zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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