Start · Sprachen · JavaScript · Referenz · RegExp.prototype.ignoreCase

RegExp.prototype.ignoreCase

Eigenschaft

Gibt <code>true</code> zurück, wenn der reguläre Ausdruck mit dem Flag <code>i</code> (Groß-/Kleinschreibung ignorieren) erzeugt wurde, sonst <code>false</code>.

seit JavaScript ES3 (als Accessor-Eigenschaft seit ES2015); Baseli Kategorie: method-property

Signatur

get RegExp.prototype.ignoreCase

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

Typ
boolean
Beschreibung
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"));
true false true false

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);
true 3

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));
gi true false [ 'FEHLER' ]

Eigenschaft ist nur lesbar

"use strict";
const re = /test/;

try {
  re.ignoreCase = true;
} catch (err) {
  console.log(err instanceof TypeError);
}
console.log(re.ignoreCase);
true false

// Wichtig · Fallstricke

  • Nur lesbar: Ein Schreibzugriff wird im nicht-strikten Modus stillschweigend ignoriert. Im Strict Mode löst er einen TypeError aus, weil nur ein Getter existiert.
  • Kein eigenes Attribut: Object.hasOwn(/a/i, "ignoreCase") ergibt false. Die Eigenschaft liegt auf RegExp.prototype. Bei JSON.stringify oder dem Spread-Operator geht sie deshalb verloren.
  • Aufruf auf dem Prototyp: RegExp.prototype.ignoreCase liefert undefined. Wird der Getter auf einem anderen Objekt ausgeführt, das kein RegExp ist, gibt es einen TypeError.
  • Unicode-Fallstricke: Ohne u/v verhalten sich manche Zeichen beim Vergleich ohne Groß-/Kleinschreibung unerwartet, z. B. das Kelvin-Zeichen K (U+212A) und k. 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 localeCompare oder Intl.Collator mit sensitivity: "base".
  • Kompatibilität: Wird von allen Browsern und Node.js unterstützt.