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

Warum gibt „RegExp' mit globalen Flags und Flags ohne Berücksichtigung der Groß-/Kleinschreibung unerwartete Ergebnisse zurück?

DDD
Freigeben: 2024-12-21 05:51:10
Original
135 Leute haben es durchsucht

Why Does `RegExp` with Global and Case-Insensitive Flags Return Unexpected Results?

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

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

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

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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage