Start · Sprachen · JavaScript · Referenz · RegExp.lastMatch ($&)

RegExp.lastMatch ($&)

Eigenschaft

Die statische, veraltete Zugriffs-Eigenschaft <code>RegExp.lastMatch</code> (Alias <code>RegExp["$&amp;"]</code>) liefert die Teilzeichenfolge, die zuletzt von einem regulären Ausdruck gefunden wurde.

seit JavaScript ES1 (Legacy-Feature, in allen Browsern und Node.js deprecated seit ja Kategorie: method-property

Signatur

get RegExp.lastMatch / RegExp["$&"]

Beschreibung

RegExp.lastMatch ist eine statische Getter-Eigenschaft des RegExp-Konstruktors. Sie enthält den zuletzt gefundenen Treffer irgendeines regulären Ausdrucks im aktuellen Realm, also z. B. nach RegExp.prototype.exec(), RegExp.prototype.test(), String.prototype.match() oder String.prototype.replace(). Das entspricht dem Wert match[0] des letzten erfolgreichen Suchlaufs.

Der Alias RegExp["$&"] muss in eckigen Klammern angesprochen werden, weil $& kein gültiger Bezeichner ist. RegExp.$& führt zu einem SyntaxError.

Die Eigenschaft hat nur einen Getter. Sie ist also schreibgeschützt, und Zuweisungen werden ignoriert (im Strict Mode lösen sie einen TypeError aus). Gab es noch keinen erfolgreichen Treffer, liefert sie einen leeren String. Ein fehlgeschlagener Suchlauf ändert den Wert nicht.

Es handelt sich um ein Legacy-Feature, das nur aus Kompatibilitätsgründen existiert. Nutze in neuem Code stattdessen den Rückgabewert von exec() bzw. match() oder das Ersetzungsmuster "$&" in replace(). Das Muster "$&" in Ersetzungsstrings ist nicht veraltet.

Rückgabewert

Typ
string
Beschreibung
Die zuletzt gefundene Teilzeichenfolge (entspricht match[0]) oder "", wenn noch kein Treffer erfolgt ist.

Beispiele

Letzten Treffer nach test() auslesen

const re = /\d{4}-\d{2}-\d{2}/;
re.test('Rechnung vom 2024-03-15, fällig bald');

console.log(RegExp.lastMatch);
console.log(RegExp['$&']); // gleicher Wert über den Alias
2024-03-15 2024-03-15

Fehlgeschlagene Suche ändert den Wert nicht

/Katze/.test('Die Katze schläft');
console.log(RegExp.lastMatch);

/Hund/.test('Die Katze schläft'); // kein Treffer
console.log(RegExp.lastMatch); // immer noch der alte Treffer
Katze Katze

Moderne Alternative: exec() und das Ersetzungsmuster $&

const text = 'Preis: 49 EUR';
const match = /\d+/.exec(text);
console.log(match?.[0]); // statt RegExp.lastMatch

// $& im Ersetzungsstring fügt den Treffer ein (nicht veraltet)
const hervorgehoben = text.replace(/\d+/, '<b>$&</b>');
console.log(hervorgehoben);
49 Preis: <b>49</b> EUR

// Wichtig · Fallstricke

  • Veraltet: Die Eigenschaft ist im Anhang B / im Proposal „Legacy RegExp features“ beschrieben und nur aus Kompatibilitätsgründen vorhanden. Verwende sie in neuem Code nicht.
  • Globaler Zustand: Der Wert gilt für den ganzen Realm. Jeder reguläre Ausdruck überschreibt ihn, auch solche in Bibliotheken oder in aufgerufenen Funktionen. Das kann schwer auffindbare Fehler verursachen und bremst Engine-Optimierungen aus.
  • Syntax: RegExp.$& ist ungültig. Der Alias funktioniert nur als RegExp["$&"].
  • Bei RegExp-Unterklassen (class MyRe extends RegExp) und bei Zugriff über einen anderen Receiver als RegExp werfen die Legacy-Getter laut Proposal einen TypeError. Außerdem können Engines sie nach Unterklassen-Treffern ungültig machen.
  • Nicht zu verwechseln mit dem Ersetzungsmuster "$&" in String.prototype.replace(), das offiziell unterstützt und empfohlen ist.
  • Kompatibilität: Unterstützt von allen Browsern und Node.js. In TypeScript ist die Eigenschaft über RegExp.lastMatch typisiert.