Signatur
Beschreibung
Die schreibgeschützte Accessor-Property global zeigt an, ob ein RegExp-Objekt mit dem Flag g erzeugt wurde. Das Flag legt fest, dass der Ausdruck alle Treffer in einer Zeichenkette sucht und nicht nach dem ersten Treffer aufhört.
Das Flag verändert das Verhalten mehrerer Methoden grundlegend:
String.prototype.match()liefert mitgein Array aller Treffer (ohne Gruppen), ohnegein einzelnes Treffer-Objekt mit Gruppen undindex.String.prototype.replace()ersetzt mitgalle Vorkommen, sonst nur das erste.RegExp.prototype.exec()undtest()werten mitgdie EigenschaftlastIndexaus und aktualisieren sie – der Ausdruck wird dadurch zustandsbehaftet.String.prototype.matchAll()undreplaceAll()verlangen bei einem RegExp-Argument zwingend dasg-Flag, sonst wird einTypeErrorgeworfen.
Die Property ist nützlich, wenn eine Funktion einen fremden regulären Ausdruck entgegennimmt und ihr Verhalten davon abhängig machen oder das Flag gezielt ergänzen muss. Ändern lässt sich das Flag nicht – dafür muss ein neuer RegExp erzeugt werden.
Rückgabewert
true, wenn das Flag g gesetzt ist, andernfalls false.Beispiele
Flag abfragen
const mitG = /katze/gi;
const ohneG = new RegExp('katze', 'i');
console.log(mitG.global);
console.log(ohneG.global);
console.log(mitG.flags);
Unterschiedliches Verhalten von match() und replace()
const text = 'Apfel, Birne, Apfel, Kirsche';
console.log(text.match(/Apfel/g));
console.log(text.match(/Apfel/).index);
console.log(text.replace(/Apfel/, 'Mango'));
console.log(text.replace(/Apfel/g, 'Mango'));
Fremden RegExp sicher für matchAll() vorbereiten
const alleTreffer = (str, regex) => {
// matchAll() wirft ohne g-Flag einen TypeError
const re = regex.global ? regex : new RegExp(regex.source, regex.flags + 'g');
return [...str.matchAll(re)].map((m) => m[0]);
};
console.log(alleTreffer('Preis: 12 €, Rabatt: 3 €', /\d+/));
Fallstrick: lastIndex bei test() mit g-Flag
const re = /js/g;
console.log(re.global);
console.log(re.test('js'));
console.log(re.lastIndex);
console.log(re.test('js')); // sucht ab Index 2 weiter!
console.log(re.test('js'));
// Wichtig · Fallstricke
- Schreibgeschützt:
re.global = falsehat keine Wirkung (im Strict Mode wirft es einenTypeError, da nur ein Getter existiert). Zum Ändern einen neuenRegExpmit angepassten Flags erzeugen. - Zustand durch
lastIndex: Ein globaler Ausdruck, der wiederverwendet wird (z. B. als Konstante auf Modulebene), liefert beitest()/exec()abwechselnde Ergebnisse. EntwederlastIndex = 0zurücksetzen oder für einfache Prüfungen aufgverzichten. - Seit ES2015 ist
globalein Getter aufRegExp.prototypestatt einer Eigenschaft der Instanz.RegExp.prototype.globalselbst liefertundefined. - Den Gesamtzustand aller Flags liefert
RegExp.prototype.flags; nicht zu verwechseln mitsticky(y), das nur an genau der PositionlastIndexsucht. - Wird in allen Browsern und Node.js unterstützt.