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?
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!