Treffer
Treffer und ihre Capture-Gruppen erscheinen hier.
Ebenfalls nützlich: der JSON-Formatierer, um Payloads zu prüfen, bevor du ein Muster dagegen schreibst, und der Hash-Generator für Prüfsummen. Beide sind genauso privat.
Jeder Treffer wird beim Tippen an Ort und Stelle hervorgehoben, nummeriert und in seine Capture-Gruppen aufgeschlüsselt, sodass du erkennst, welcher Teil des Musters was bewirkt hat.
Das Matching nutzt dieselbe JavaScript-Regex-Engine, auf der dein Code laufen wird. Was du hier siehst, ist also genau das, was Node und der Browser tun.
Regex-Debugging heißt meist, Produktions-Logs einzufügen. Nichts verlässt dein Gerät, nichts wird protokolliert, und die Seite funktioniert offline.
Was ist ein regulärer Ausdruck?
Ein regulärer Ausdruck, kurz Regex, ist eine kleine Sprache, um die Form von Text zu beschreiben. Statt nach einer wörtlichen Zeichenfolge zu suchen, beschreibst du ein Muster: „ein @-Zeichen mit Wortzeichen auf beiden Seiten“, „vier Ziffern, ein Bindestrich, zwei Ziffern“. Die Engine findet dann jeden Textabschnitt, der passt.
Diese Mächtigkeit hat einen bekannten Nachteil: Regex wird dicht geschrieben und selten gelesen. Ein Muster, das funktioniert, ist einfach; ein Muster, das du nächsten Monat noch verstehst, ist der schwere Teil. Interaktiv zu testen und zuzusehen, wie Treffer erscheinen und verschwinden, während du ein einzelnes Zeichen änderst, ist mit Abstand der schnellste Weg, eines korrekt zu bauen.
So nutzt du diesen Tester
Tippe dein Muster in das Feld oben (keine umgebenden Schrägstriche nötig, sie werden für dich gezeichnet), schalte die gewünschten Flags um und füge deinen Text darunter ein. Treffer werden sofort hervorgehoben, in abwechselnden Tönen, sodass du siehst, wo einer endet und der nächste beginnt. Der Bereich Treffer listet jedes Ergebnis mit Position und Capture-Gruppen auf, und die Ersetzungsvorschau zeigt, was ein Suchen-und-Ersetzen ergäbe, bevor du es irgendwo echt ausführst.
Gierige vs. genügsame Quantoren
Standardmäßig sind Quantoren gierig: .+ nimmt so viel Text wie möglich und gibt nur so weit nach, wie es muss. Füge ein ? hinzu, um einen genügsamen zu erhalten: .+? nimmt so wenig wie möglich. Dieses eine Zeichen erklärt die meisten „Warum trifft meine Regex die ganze Zeile?“-Fehler. Probiere <.+> gegen <a><b> und dann <.+?>.
Regex-Spickzettel
| Token | Treffer |
|---|---|
. | Jedes Zeichen außer einem Zeilenumbruch (mit dem s-Flag wirklich jedes Zeichen) |
\d \D | Eine Ziffer 0-9 / alles, was keine Ziffer ist |
\w \W | Ein Wortzeichen (Buchstabe, Ziffer, Unterstrich) / alles andere |
\s \S | Beliebiger Leerraum (Leerzeichen, Tab, Zeilenumbruch) / alles andere |
[abc] [^abc] | Eines von a, b, c / jedes Zeichen außer diesen |
[a-z] | Jedes Zeichen im Bereich a bis z |
^ $ | Anfang / Ende der Zeichenfolge, oder jeder Zeile mit dem m-Flag |
\b | Eine Wortgrenze, die Kante zwischen \w und nicht-\w |
* + ? | Das vorherige Element null oder mehr / ein oder mehr / null oder ein Mal |
{2} {2,} {2,5} | Genau 2 / 2 oder mehr / zwischen 2 und 5 Mal |
+? *? | Genügsame Varianten, die so wenige Zeichen wie möglich treffen |
(abc) | Capture-Gruppe, speichert den Treffer als $1 |
(?:abc) | Nicht erfassende Gruppe, gruppiert ohne zu speichern |
(?<name>abc) | Benannte Capture-Gruppe, ausgelesen als $<name> |
a|b | Entweder a oder b |
(?=abc) (?!abc) | Lookahead: gefolgt von / nicht gefolgt von (verbraucht keinen Text) |
(?<=abc) (?<!abc) | Lookbehind: mit Vorangehendem / ohne Vorangehendes |
\. \/ \\ | Ein wörtlicher Punkt, Schrägstrich oder Backslash. Maskiere jedes Sonderzeichen mit \ |
Gängige Regex-Muster
Nützliche Ausgangspunkte. Klicke oben im Tester auf einen Beispiel-Button, um eines zu laden. Betrachte sie als pragmatisch, nicht als vollständig: Eine E-Mail-Regex, die den kompletten RFC erfüllt, ist berüchtigt unlesbar und würde dir trotzdem nicht sagen, ob die Adresse existiert.
| Ziel | Muster |
|---|---|
| E-Mail-Adresse | [\w.+-]+@[\w-]+\.[\w.]+ |
| URL | https?://[^\s"<>]+ |
| ISO-Datum, benannte Gruppen | (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) |
| Hex-Farbe | #(?:[0-9a-f]{3}|[0-9a-f]{6})\b |
| IPv4-Adresse | \b(?:\d{1,3}\.){3}\d{1,3}\b |
Leerzeilen (mit m) | ^\s*$ |
| Doppeltes Wort | \b(\w+)\s+\1\b |
| Nachgestellter Leerraum | [ \t]+$ |
Häufig gestellte Fragen
Was ist ein regulärer Ausdruck?
Ein regulärer Ausdruck (Regex) ist ein kompaktes Muster, das eine Menge von Zeichenfolgen beschreibt. Statt nach einem festen Wort zu suchen, beschreibst du seine Form („drei Ziffern, ein Bindestrich, dann vier Ziffern“), und die Engine findet jeden Textabschnitt, der zu dieser Form passt. Regex treibt Suchen und Ersetzen in Editoren, die Eingabeprüfung, das Durchsuchen von Logs und das Extrahieren von Text in fast jeder Programmiersprache an.
Was bedeuten die Regex-Flags g, i, m, s, u und y?
Das Flag g (global) findet jeden Treffer, statt beim ersten aufzuhören. i ignoriert Groß- und Kleinschreibung. m (multiline) lässt ^ und $ an Anfang und Ende jeder Zeile statt der gesamten Zeichenfolge greifen. s (dotAll) lässt den Punkt auch Zeilenumbrüche treffen. u aktiviert den vollen Unicode-Modus, der für \p{...}-Eigenschafts-Escapes nötig ist. y (sticky) erzwingt, dass jeder Treffer genau dort beginnt, wo der vorige endete.
Was ist der Unterschied zwischen einer Capture-Gruppe und einer nicht erfassenden Gruppe?
Klammern wie (\d+) erzeugen eine Capture-Gruppe: Der getroffene Text wird gespeichert und lässt sich als $1 in einer Ersetzung wiederverwenden oder aus dem Trefferergebnis auslesen. Schreibst du stattdessen (?:\d+), entsteht eine nicht erfassende Gruppe, die das Muster für Alternation oder Wiederholung weiterhin gruppiert, das Ergebnis aber nicht speichert. Nutze nicht erfassende Gruppen, wenn du nur die Gruppierung brauchst, denn so bleiben deine Gruppennummern aussagekräftig.
Wie nutze ich Capture-Gruppen in einer Ersetzung?
Verweise auf eine nummerierte Gruppe mit $1, $2 und so weiter, wobei du die öffnenden Klammern von links zählst. Eine benannte Gruppe wie (?<year>\d{4}) sprichst du mit $<year> an. Nutze $& für den gesamten Treffer und $$ für ein wörtliches Dollarzeichen. Die Ersetzungsvorschau auf dieser Seite zeigt das Ergebnis, bevor du es irgendwo anwendest.
Welchen Regex-Dialekt nutzt dieser Tester?
Er nutzt die JavaScript-Engine (ECMAScript) deines eigenen Browsers, also stimmen die Ergebnisse exakt mit dem überein, was Node.js und Browser-Code tun. Die JavaScript-Syntax überschneidet sich stark mit PCRE, Python und Java, ein paar Dinge unterscheiden sich aber: JavaScript hat kein x-Flag für freies Spacing, keine atomaren Gruppen und keine Rekursion. Lookbehind, benannte Gruppen und \p{...}-Eigenschafts-Escapes werden in modernen Browsern alle unterstützt.
Wird meine Regex oder mein Testtext irgendwohin gesendet?
Nein. Das Matching läuft als JavaScript in deinem Browser mit der Regex-Engine deines eigenen Geräts. Dein Muster und dein Testtext, oft Log-Zeilen aus der Produktion oder echte Kundendaten, werden nie hochgeladen, protokolliert oder getrackt, und einmal geladen funktioniert die Seite offline weiter.