Signatur
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
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
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
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);
// 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 alsRegExp["$&"]. - Bei RegExp-Unterklassen (
class MyRe extends RegExp) und bei Zugriff über einen anderen Receiver alsRegExpwerfen die Legacy-Getter laut Proposal einenTypeError. Außerdem können Engines sie nach Unterklassen-Treffern ungültig machen. - Nicht zu verwechseln mit dem Ersetzungsmuster
"$&"inString.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.lastMatchtypisiert.