Reguläre Ausdrücke Spickzettel: Syntax, Flags und häufige Muster
Schnelle Antwort
Ein regulärer Ausdruck kombiniert Literalzeichen, Metazeichen (., \d, \w, \s), Quantoren (*, +, ?, {n,m}), Anker (^, $, \b) und Gruppen ((...), [...]). Flags wie g (global), i (ohne Berücksichtigung der Groß- und Kleinschreibung) und m (mehrzeilig) ändern das Übereinstimmungsverhalten. Testen Sie Muster live mit unserem Regex-Tester, bevor Sie sie in Code einbetten.
Einführung
Reguläre Ausdrücke (Regex) beschreiben Textmuster mithilfe einer kompakten formalen Sprache. Sie werden von jeder modernen Programmiersprache, jedem Editor und jedem Suchtool unterstützt. Dieser Spickzettel ist eine Referenz für die von ECMAScript definierte Syntax (von JavaScript verwendet) sowie für gängige Muster, die Sie kopieren und anpassen können. Verwenden Sie unseren Regex-Tester, um beliebige Muster anhand von Beispieltexten in Ihrem Browser auszuprobieren.
Schritt für Schritt
-
Zeichenklassen – entsprechen einer Reihe von Zeichen
[abc] entspricht a, b oder c. [^abc] passt auf alles außer a, b, c. [a-z] entspricht jedem Kleinbuchstaben. Vordefinierte Klassen: \d = [0-9], \D = Nicht-Ziffer, \w = [A-Za-z0-9_], \W = Nicht-Wort, \s = Leerzeichen, \S = Nicht-Leerzeichen, . = jedes Zeichen außer Newline (verwenden Sie das Flag s, um Newline einzuschließen).
-
Quantifizierer – wie oft wiederholt werden soll
* = 0 oder mehr. + = 1 oder mehr. ? = 0 oder 1. {n} = genau n. {n,} = mindestens n. {n,m} = zwischen n und m. Hinzufügen ? für Lazy Matching (z. B. *? stimmt mit so wenigen Übereinstimmungen wie möglich überein). Greedy ist die Standardeinstellung und kann bei verschachtelten Mustern zu katastrophalem Backtracking führen.
-
Anker und Grenzen – wo sie zusammenpassen
^ entspricht dem Anfang der Zeichenfolge (oder Zeile mit m-Flag). $ entspricht dem Ende. \b entspricht einer Wortgrenze (zwischen \w und \W). \B entspricht einer Nicht-Wortgrenze. Anker haben eine Breite von Null – sie testen die Position, ohne Zeichen zu verbrauchen.
-
Gruppen und Abwechslung
(abc) ist eine einfangende Gruppe; Verwenden Sie 1 $, 2 $ als Ersatz. (?:abc) ist eine nicht einfangende Gruppe. (?=abc) ist ein Lookahead (behauptet, was folgt). (?!abc) ist ein negativer Lookahead. (?<=abc) ist ein Lookbehind (ES2018+). a|b ist Wechsel (a oder b).
-
Flags – Matching-Verhalten ändern
g = global (alle Übereinstimmungen finden, nicht nur die erste). i = Groß- und Kleinschreibung wird nicht beachtet. m = mehrzeilig (^ und $ stimmen mit Liniengrenzen überein). s = dotAll (. entspricht Newline). u = Unicode (behandeln Sie das Muster als Unicode-Codepunkte; erforderlich für Emoji- und Astralzeichen). y = sticky (nur Übereinstimmung bei lastIndex).
Beispiele
Eine E-Mail-Adresse abgleichen (praktisch, RFC 5322 vereinfacht)
Eingang: Pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
Ausgabe: Entspricht „[email protected]“ und „[email protected]“, aber nicht „plainaddress“ oder „@no-user.com“.
Extrahieren Sie alle Hex-Farbcodes aus CSS
Eingang: Pattern: /#[0-9a-fA-F]{3,8}\b/g
Ausgabe: In 'color: #fff; background: #1a2b3c4d' finds ['#fff', '#1a2b3c4d']
Validieren Sie ein ISO 8601-Datum (JJJJ-MM-TT).
Eingang: Pattern: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/
Ausgabe: Entspricht „28.08.2026“, lehnt jedoch „01.13.2026“ und „31.02.2026“ ab.
Ersetzen Sie Ziffern mithilfe einer Erfassungsgruppe durch #
Eingang: 'Bestellung 42 versendet' ersetzt durch /(\d+)/g →'#$1'
Ausgabe: „Bestellung Nr. 42 versendet“
Häufige Probleme
- Gierige Quantoren stimmen zu oft überein: „<.*>“ auf „<a><b>“ entspricht der gesamten Zeichenfolge „<a><b>“ anstelle von „<a>“. Verwenden Sie „<.*?>“ (faul), um zuerst „<a>“ zu finden.
- Katastrophales Backtracking: Verschachtelte Quantoren wie (a+)+b bei der Eingabe „aaaaaaaaaaaaaaaa!“ kann exponentielle Zeit in Anspruch nehmen. Schreiben Sie das Muster neu oder verwenden Sie atomare Gruppen/Possessivquantoren, sofern dies unterstützt wird.
- Vergessen des u-Flags für Unicode: /^.$/ entspricht einer einzelnen Codeeinheit, sodass Emojis wie „😀“ (zwei Codeeinheiten) ohne das u-Flag fehlschlagen. Füge immer u hinzu, wenn du astrale Charaktere kombinierst.
- \b (Wortgrenze) mit \s (Leerzeichen) verwechseln: \b stimmt zwischen einem Wort und einem Nicht-Wort-Zeichen überein, funktioniert also auch am Anfang/Ende der Zeichenfolge. \s stimmt nur mit tatsächlichen Leerzeichen überein.
Tipps
- Testen Sie Regex immer sowohl anhand übereinstimmender als auch nicht übereinstimmender Muster in unserem Regex-Tester, bevor Sie ihn in den Produktionscode einbetten – Randfälle sind leicht zu übersehen.
- Bevorzugen Sie die Zeichenklassen [a-z] gegenüber der Alternation (a|b|...|z) für einzelne Zeichen – Klassen sind schneller und klarer.
- Verwenden Sie nicht erfassende Gruppen (?:...), wenn Sie den erfassten Wert nicht benötigen – die Erfassung verursacht nur geringe Leistungseinbußen und überfüllt das Ergebnisarray.
- Kompilieren Sie Regex einmal mit new RegExp() oder einem Literal im Modulbereich, nicht innerhalb einer Hot-Loop – das Neukompilieren desselben Musters bei jeder Iteration verschwendet CPU.