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

RegExp.prototype.global

Eigenschaft

Gibt <code>true</code> zurück, wenn der reguläre Ausdruck mit dem Flag <code>g</code> (global) erzeugt wurde, sonst <code>false</code>.

seit JavaScript ES3 (als Accessor-Property seit ES2015) – Baseline Kategorie: method-property

Signatur

get RegExp.prototype.global

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 mit g ein Array aller Treffer (ohne Gruppen), ohne g ein einzelnes Treffer-Objekt mit Gruppen und index.
  • String.prototype.replace() ersetzt mit g alle Vorkommen, sonst nur das erste.
  • RegExp.prototype.exec() und test() werten mit g die Eigenschaft lastIndex aus und aktualisieren sie – der Ausdruck wird dadurch zustandsbehaftet.
  • String.prototype.matchAll() und replaceAll() verlangen bei einem RegExp-Argument zwingend das g-Flag, sonst wird ein TypeError geworfen.

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

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

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'));
[ 'Apfel', 'Apfel' ] 0 Mango, Birne, Apfel, Kirsche Mango, Birne, Mango, Kirsche

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+/));
[ '12', '3' ]

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'));
true true 2 false true

// Wichtig · Fallstricke

  • Schreibgeschützt: re.global = false hat keine Wirkung (im Strict Mode wirft es einen TypeError, da nur ein Getter existiert). Zum Ändern einen neuen RegExp mit angepassten Flags erzeugen.
  • Zustand durch lastIndex: Ein globaler Ausdruck, der wiederverwendet wird (z. B. als Konstante auf Modulebene), liefert bei test()/exec() abwechselnde Ergebnisse. Entweder lastIndex = 0 zurücksetzen oder für einfache Prüfungen auf g verzichten.
  • Seit ES2015 ist global ein Getter auf RegExp.prototype statt einer Eigenschaft der Instanz. RegExp.prototype.global selbst liefert undefined.
  • Den Gesamtzustand aller Flags liefert RegExp.prototype.flags; nicht zu verwechseln mit sticky (y), das nur an genau der Position lastIndex sucht.
  • Wird in allen Browsern und Node.js unterstützt.