Signatur
Beschreibung
RegExp.leftContext ist eine statische, schreibgeschützte Zugriffs-Eigenschaft des globalen RegExp-Konstruktors. Sie enthält die Teilzeichenkette des durchsuchten Strings, die vor der zuletzt erfolgreichen Übereinstimmung steht. Der kurze Alias lautet RegExp["$`"]. Wegen des Backticks im Namen geht das nur über die Klammer-Schreibweise, RegExp.$` ist ein Syntaxfehler.
Der Wert wird bei jeder erfolgreichen Suche mit einem regulären Ausdruck neu gesetzt, also bei RegExp.prototype.exec(), test(), String.prototype.match(), replace(), search() und ähnlichen Methoden. Schlägt die Suche fehl, bleibt der alte Wert erhalten. Das Gegenstück ist RegExp.rightContext ($'), das den Rest nach der Übereinstimmung liefert.
Die Eigenschaft gehört zu den Legacy-RegExp-Features. Sie hängt an globalem Zustand und ist deshalb schwer nachzuvollziehen. In neuem Code sollte man den Präfix direkt aus dem Match-Ergebnis berechnen: match.input.slice(0, match.index). Bei String.prototype.replace() gibt es außerdem das gleichnamige Ersetzungsmuster $` im Ersetzungs-String. Das ist standardisiert und hängt nicht vom globalen Zustand ab.
Rückgabewert
"".Beispiele
Grundlegende Nutzung und Alias
const re = /welt/;
re.test('Hallo welt, wie geht es?');
console.log(RegExp.leftContext); // Langform
console.log(RegExp['$`']); // Alias – nur in Klammer-Schreibweise
console.log(RegExp.rightContext); // Gegenstück
Moderne Alternative ohne globalen Zustand
const log = '2024-05-01 ERROR Datenbank nicht erreichbar';
const match = /ERROR/.exec(log);
if (match) {
// Entspricht RegExp.leftContext, ist aber lokal und sicher
const prefix = match.input.slice(0, match.index).trim();
console.log(`Zeitstempel: ${prefix}`);
}
Ersetzungsmuster $` in replace()
// $` im Ersetzungs-String steht für den Text vor dem Treffer
const result = 'abc-def'.replace('-', '[$`]');
console.log(result);
Fallstrick: Wert wird von späteren Suchen überschrieben
/b/.test('abc');
const first = RegExp.leftContext; // 'a'
'xyz'.replace(/z/, '!'); // setzt den globalen Zustand neu
console.log(first, RegExp.leftContext);
/nichtda/.test('abc'); // fehlgeschlagen → Wert bleibt
console.log(RegExp.leftContext);
// Wichtig · Fallstricke
- Nicht empfohlen: Die Eigenschaft ist ein Legacy-Feature und nicht Teil des eigentlichen ECMAScript-Standards. Es gibt nur einen Vorschlag („Legacy RegExp features“), sie zu standardisieren. Alle großen Engines (V8, SpiderMonkey, JavaScriptCore) und Node.js unterstützen sie trotzdem.
- Globaler Zustand: Jede erfolgreiche Regex-Suche überschreibt den Wert, auch Suchen in Bibliotheken oder zwischen
await-Punkten. Den Wert deshalb sofort auslesen oder bessermatch.input.slice(0, match.index)verwenden. - Syntax:
RegExp.$`ist ungültig. Man mussRegExp["$`"]schreiben. - Unterklassen und Realms: Laut Legacy-Vorschlag wirft der Zugriff einen
TypeError, wenn die letzte Suche von einerRegExp-Unterklasse oder aus einem anderen Realm stammte. Je nach Engine wird die Eigenschaft in diesen Fällen auch einfach nicht aktualisiert. - Nur lesbar: Es gibt keinen Setter. Zuweisungen haben keine Wirkung und werfen im Strict Mode einen
TypeError. - Performance: Engines müssen den Eingabe-String für diese statischen Eigenschaften intern aufbewahren. Das kann Optimierungen verhindern.