Developer Tools

Reguläre Ausdrücke für Einsteiger: Muster, die wirklich Sinn ergeben

Eine freundliche Einführung in die Regex-Syntax, gängige Muster zur Validierung und Suche sowie Tipps zum frustrationsfreien Testen von Ausdrücken.

7 Min. Lesezeit

Code auf einem Laptop-Bildschirm

Reguläre Ausdrücke (Regex) gelten als schwer lesbar. Aber sobald man die Grundbausteine kennt, werden sie zu einem der mächtigsten Werkzeuge im Werkzeugkasten eines Entwicklers – von der Validierung von Benutzereingaben bis hin zur Suche in Log-Dateien.

Was ist ein regulärer Ausdruck?

Ein Regex ist ein Muster, das eine Menge von Zeichenketten beschreibt. Man gibt der Regex-Engine ein Muster und eine Zielzeichenkette; sie sagt einem, ob (und wo) das Muster übereinstimmt.

const pattern = /hello/i;
pattern.test("Hello World"); // true

Das /i-Flag macht den Vergleich groß-/kleinschreibungsunabhängig. Flags stehen in JavaScript nach dem schließenden /.

Wesentliche Grundbausteine

Symbol Bedeutung Beispiel Treffer
. Beliebiges Zeichen (außer Zeilenumbruch) h.t hat, hit, hot
* Null oder mehr des Vorherigen ab*c ac, abc, abbc
+ Ein oder mehr des Vorherigen ab+c abc, abbc (nicht ac)
? Null oder eins des Vorherigen colou?r color, colour
\d Beliebige Ziffer (0–9) \d{3} 123, 007
\w Wortzeichen (Buchstabe, Ziffer, _) \w+ hello, user_1
\s Leerzeichen (Leerzeichen, Tab, Zeilenumbruch) \s+ trifft Leerzeichen
^ Anfang der Zeichenkette ^Hello Hello…
$ Ende der Zeichenkette world$ …world

Zeichenklassen

Eckige Klammern definieren eine Menge von Zeichen, auf die gematcht werden soll:

[aeiou]     — beliebiger Vokal
[A-Z]       — beliebiger Großbuchstabe
[0-9a-f]    — beliebige Hex-Ziffer
[^0-9]      — alles, was KEINE Ziffer ist

Gruppen und Alternativen

Klammern gruppieren Teile eines Musters, und | bedeutet „oder":

(cat|dog)s?   — trifft cat, cats, dog, dogs
(\d{3})-(\d{4}) — trifft 555-1234 und erfasst jeden Teil

Erfasste Gruppen sind nützlich zur Extraktion – um Telefonnummern, Datumsangaben oder IDs aus unstrukturiertem Text herauszuziehen.

Gängige Muster aus der Praxis

E-Mail (vereinfacht)

^[^\s@]+@[^\s@]+\.[^\s@]+$

Dies prüft auf „etwas @ etwas . etwas" – gut genug für die clientseitige Validierung. Für den Produktionseinsatz empfiehlt sich eine echte Zustellungsprüfung mit unserem Email Validator.

URL

https?:\/\/[^\s/$.?#].[^\s]*

Trifft sowohl http- als auch https-URLs. Zum Erstellen gültiger URLs siehe den URL & Query String Builder.

Telefonnummer (US)

\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}

Trifft Formate wie (555) 123-4567, 555.123.4567 und 555-123-4567.

Datum (YYYY-MM-DD)

\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])

Regex debuggen

Der beste Weg zu lernen ist interaktives Testen. Füge dein Muster und eine Beispielzeichenkette in unseren Regex Tester ein – er hebt Treffer in Echtzeit hervor, zeigt erfasste Gruppen an und erklärt, was jeder Teil deines Musters bewirkt.

Schreibe das einfachste Muster, das dein Problem löst. „Clevere" Regexes sind schwer zu warten.

Performance-Fallstricke

Katastrophales Backtracking

Verschachtelte Quantoren wie (a+)+b können dazu führen, dass die Engine bei nicht übereinstimmenden Eingaben eine exponentielle Anzahl von Pfaden ausprobiert. Vermeide Muster, bei denen dieselben Zeichen von mehreren Teilen des Ausdrucks gematcht werden können.

Verankerung spart Zeit

Wenn du weißt, dass dein Muster die gesamte Zeichenkette treffen soll, verwende ^ und $. Ohne Anker durchsucht die Engine jede Position in der Zeichenkette nach einem partiellen Treffer.

Kurzübersicht als Spickzettel

.           beliebiges Zeichen
\d \D       Ziffer / Nicht-Ziffer
\w \W       Wortzeichen / Nicht-Wortzeichen
\s \S       Leerzeichen / kein Leerzeichen
[abc]       Zeichenmenge
[^abc]      negierte Menge
(group)     erfassende Gruppe
(?:group)   nicht-erfassende Gruppe
a{3}        genau 3
a{2,5}      zwischen 2 und 5
a*? a+?     lazy (nicht-gierige) Varianten
(?=ahead)   positiver Lookahead
(?!ahead)   negativer Lookahead

Regex ist eine Fertigkeit, die sich aufbaut. Beginne mit einfachen Mustern, teste sie visuell und erhöhe die Komplexität nur bei Bedarf. Jede Programmiersprache unterstützt Regex – einmal gelernt, ist die Syntax überall einsetzbar.