Signatur
Beschreibung
Eine Eingabebegrenzungs-Assertion ist eine Zusicherung mit der Breite null: Sie verbraucht kein Zeichen und prüft nur, ob die aktuelle Position im String eine Grenze ist. ^ passt am Anfang der Eingabe, $ am Ende. Beide werden vor allem zum Verankern eines Musters verwendet. So lässt sich sicherstellen, dass der gesamte String einem Format entspricht und nicht nur ein Teil davon, etwa bei der Prüfung von Postleitzahlen, IDs oder Hex-Farben.
Ist das Flag m (multiline) gesetzt, ändert sich die Bedeutung: ^ passt dann zusätzlich direkt nach jedem Zeilenumbruch, $ direkt vor jedem Zeilenumbruch. Als Zeilenumbruch gelten \n, \r, \u2028 und \u2029. Damit kann man Text zeilenweise durchsuchen, zum Beispiel Konfigurationsdateien, Logs oder Markdown.
Wichtig: ^ hat nur am Anfang eines Musters oder einer Alternative diese Bedeutung. Innerhalb einer Zeichenklasse direkt nach [ bedeutet es dagegen Negation ([^0-9]). Wer ein wörtliches ^ oder $ finden will, muss es mit \^ bzw. \$ maskieren.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $^ | Assertion | Passt am Anfang der Eingabe. Mit Flag m passt es zusätzlich nach jedem Zeilenumbruch. |
|
| $$ | Assertion | Passt am Ende der Eingabe. Mit Flag m passt es zusätzlich vor jedem Zeilenumbruch. |
|
| $m | Flag | nicht gesetzt | Multiline-Flag. Macht aus den Eingabegrenzen Zeilengrenzen. |
Rückgabewert
Beispiele
Ganzen String validieren (Postleitzahl)
const plz = /^\d{5}$/;
console.log(plz.test('10115')); // genau 5 Ziffern
console.log(plz.test('PLZ 10115')); // Präfix, daher kein Treffer
console.log(/\d{5}/.test('PLZ 10115')); // ohne Anker: Teiltreffer
Zeilenweise suchen mit Flag m
const log = `INFO Start
ERROR Datenbank nicht erreichbar
INFO Retry
ERROR Timeout`;
const fehler = log.match(/^ERROR .*$/gm);
console.log(fehler);
// Ohne m passt ^ nur am Anfang des gesamten Strings
console.log(log.match(/^ERROR .*$/g));
Führende und abschließende Leerzeichen entfernen
const eingabe = ' Hallo Welt ';
const bereinigt = eingabe.replace(/^\s+|\s+$/g, '');
console.log(`[${bereinigt}]`);
Zeilen einrücken (Präfix je Zeile)
const code = 'const a = 1;\nconst b = 2;';
const eingerueckt = code.replace(/^/gm, ' ');
console.log(eingerueckt);
// Wichtig · Fallstricke
- Vorrang bei Alternativen:
/^a|b$/bedeutet „aam Anfang ODERbam Ende“. Sollen beide Anker für alle Alternativen gelten, braucht man eine Gruppe:/^(?:a|b)$/. Das ist ein häufiger Validierungsfehler. $und abschließender Zeilenumbruch: Anders als in Perl, PCRE oder Python passt$in JavaScript ohne Flagmnicht vor einem abschließenden\n. Deshalb liefert/^abc$/.test('abc\n')den Wertfalse. Die Anker\A,\Zund\zgibt es in JavaScript nicht.- Windows-Zeilenenden: Da auch
\rals Zeilenumbruch zählt, entsteht mit Flagmbei\r\neine leere „Zeile“ zwischen\rund\n. Das kann bei/^$/gmzusätzliche Treffer erzeugen. - Mit Flag
y(sticky):^passt ohne Flagmweiterhin nur am Anfang der Eingabe, nicht an der PositionlastIndex. - Sicherheit und Leistung: Bei der Validierung von Benutzereingaben sollte man immer beide Anker setzen, sonst werden Eingaben wie
'<script>12345'akzeptiert. Verankerte Muster scheitern außerdem schneller und verringern die Gefahr von ReDoS. - Innerhalb von
[...]ist^ein Negationszeichen und$ein normales Zeichen.