Signatur
Beschreibung
Die Accessor-Eigenschaft ignoreCase zeigt an, ob ein RegExp-Objekt mit dem Flag i erzeugt wurde. Ist das Flag gesetzt, ignoriert der Ausdruck beim Suchen die Groß- und Kleinschreibung: /abc/i findet also auch "ABC" oder "aBc".
Die Eigenschaft ist nur lesbar. Sie ist als Getter auf RegExp.prototype definiert, nicht als eigene Eigenschaft der Instanz. Das Flag lässt sich nachträglich nicht ändern. Wer das Verhalten ändern will, erzeugt einen neuen Ausdruck, z. B. mit new RegExp(re.source, re.flags + "i").
Praktisch ist ignoreCase vor allem, wenn eine Funktion reguläre Ausdrücke von außen bekommt und ihr Verhalten danach richten muss. Beispiele sind Hilfsfunktionen, die einen Ausdruck um Flags ergänzen, Suchfelder mit dem Schalter „Groß-/Kleinschreibung beachten“ oder Code, der Suchtreffer hervorhebt.
Ohne das Flag u oder v gelten für den Vergleich ohne Groß-/Kleinschreibung die einfachen Umwandlungsregeln (toUpperCase-basiert). Mit u/v nutzt die Engine die Unicode-Regeln für die einfache Groß-/Kleinschreibung (Simple Case Folding). Dadurch können sich die Treffer bei manchen Sonderzeichen unterscheiden.
Rückgabewert
true, wenn das Flag i gesetzt ist, sonst false. Wird der Getter direkt auf RegExp.prototype aufgerufen, ist das Ergebnis undefined.Beispiele
Flag abfragen
const mitFlag = /hallo/i;
const ohneFlag = new RegExp("hallo");
console.log(mitFlag.ignoreCase);
console.log(ohneFlag.ignoreCase);
console.log(mitFlag.test("HALLO Welt"));
console.log(ohneFlag.test("HALLO Welt"));
Suchfunktion mit Schalter für Groß-/Kleinschreibung
const escapeRegExp = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
const erstelleSuche = (begriff, { beachteGrossKlein = false } = {}) =>
new RegExp(escapeRegExp(begriff), beachteGrossKlein ? "g" : "gi");
const re = erstelleSuche("JavaScript");
const text = "javascript, JavaScript und JAVASCRIPT";
console.log(re.ignoreCase);
console.log(text.match(re).length);
Fehlendes i-Flag nachträglich ergänzen
const mitIgnoreCase = (re) =>
re.ignoreCase ? re : new RegExp(re.source, re.flags + "i");
const original = /fehler/g;
const neu = mitIgnoreCase(original);
console.log(neu.flags);
console.log(neu.ignoreCase, original.ignoreCase);
console.log("FEHLER in Zeile 3".match(neu));
Eigenschaft ist nur lesbar
"use strict";
const re = /test/;
try {
re.ignoreCase = true;
} catch (err) {
console.log(err instanceof TypeError);
}
console.log(re.ignoreCase);
// Wichtig · Fallstricke
- Nur lesbar: Ein Schreibzugriff wird im nicht-strikten Modus stillschweigend ignoriert. Im Strict Mode löst er einen
TypeErroraus, weil nur ein Getter existiert. - Kein eigenes Attribut:
Object.hasOwn(/a/i, "ignoreCase")ergibtfalse. Die Eigenschaft liegt aufRegExp.prototype. BeiJSON.stringifyoder dem Spread-Operator geht sie deshalb verloren. - Aufruf auf dem Prototyp:
RegExp.prototype.ignoreCaseliefertundefined. Wird der Getter auf einem anderen Objekt ausgeführt, das kein RegExp ist, gibt es einenTypeError. - Unicode-Fallstricke: Ohne
u/vverhalten sich manche Zeichen beim Vergleich ohne Groß-/Kleinschreibung unerwartet, z. B. das Kelvin-ZeichenK(U+212A) undk. Für mehrsprachige Texte empfiehlt sich deshalb/…/iu. - Nicht sprachabhängig: Das Flag berücksichtigt keine Besonderheiten einzelner Sprachen, etwa das türkische „İ/ı“. Für solche Vergleiche eignen sich
localeCompareoderIntl.Collatormitsensitivity: "base". - Kompatibilität: Wird von allen Browsern und Node.js unterstützt.