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
DDDOriginal
2024-12-21 05:51:10217Durchsuche

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]

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!

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