Globale RegExp-Verwirrung
Das globale Flag (g) in einem regulären Ausdruck soll nach allen Vorkommen des Musters in einer Zeichenfolge suchen , im Gegensatz zum ersten. Bei Verwendung mit dem Flag, bei dem die Groß-/Kleinschreibung nicht beachtet wird (i), führt dies jedoch möglicherweise nicht zu den erwarteten Ergebnissen.
Das Problem
Stellen Sie sich das folgende Szenario vor:
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]
Der Grund
Das Problem entsteht, weil das globale Flag dazu führt, dass RegExp-Objekte das Letzte verfolgen Index, in dem eine Übereinstimmung aufgetreten ist. Bei nachfolgenden Übereinstimmungen beginnt die Suche bei diesem Index statt bei 0. Dies geschieht im obigen Beispiel:
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
Wie Sie sehen können, ergab die zweite Übereinstimmung „false“, da die Suche bei begann Index 6, wo die Übereinstimmung bereits beim ersten Test aufgetreten ist.
Problem lösen
Um dieses Problem zu vermeiden, Sie können die lastIndex-Eigenschaft des RegExp-Objekts zwischen Übereinstimmungen zurücksetzen:
var query = 'Foo B'; var re = new RegExp(query, 'gi'); var result = []; result.push(re.test('Foo Bar')); re.lastIndex = 0; // Reset the last index result.push(re.test('Foo Bar')); // result will be [true, true]
Das obige ist der detaillierte Inhalt vonWarum gibt „RegExp' mit globalen Flags und Flags ohne Berücksichtigung der Groß-/Kleinschreibung unerwartete Ergebnisse zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!