JavaScript Regex Zeichenklassen
JavaScript Regex Zeichenklassen: Kürzel \d \w \s, ihre Negationen \D \W \S, der Punkt, das s-Flag (dotAll) und eigene [...]-Klassen mit Bereichen.
Zeichenklassen in JavaScript
Eine Zeichenklasse ist ein Teil eines regulären Ausdrucks, der genau ein Zeichen aus einer bestimmten Menge abgleicht — zum Beispiel „eine beliebige Ziffer" oder „ein beliebiges Leerzeichen". Anstatt jedes mögliche Zeichen einzeln aufzulisten, beschreibt man die Art des gesuchten Zeichens, und die Regex-Engine übernimmt den Abgleich.
Diese Seite behandelt die eingebauten Kürzel-Klassen (\d, \w, \s), ihre Negationen (\D, \W, \S), den speziellen Punkt . und das s-Flag (dotAll) sowie das Erstellen eigener Klassen mit eckigen Klammern [...], einschließlich Bereichen und Maskierung.
Jede Klasse stimmt mit genau einem Zeichen überein. Um mehrere Zeichen zu erfassen, kombiniert man eine Klasse mit einem Quantifizierer wie + oder {2,4}.
Die Kürzel-Klassen: \d \w \s
JavaScript bietet drei Kürzel-Klassen für die häufigsten Zeichengruppen.
| Klasse | Stimmt überein mit | Entspricht |
|---|---|---|
\d | einer Ziffer | [0-9] |
\w | einem Wortzeichen: Buchstabe, Ziffer oder Unterstrich | [A-Za-z0-9_] |
\s | einem Leerzeichen: Leertaste, Tab \t, Zeilenumbruch \n usw. | — |
Ein einzelnes Kürzel stimmt mit einem Zeichen überein. Füge einen Quantifizierer hinzu, um eine Folge davon zu erfassen — \d+ bedeutet „eine oder mehrere Ziffern":
Die negierten Klassen: \D \W \S
Jedes Kürzel hat ein Großbuchstaben-Pendant, das die umgekehrte Menge abgleicht — also jedes Zeichen, das nicht in der ursprünglichen Klasse enthalten ist.
| Klasse | Stimmt überein mit |
|---|---|
\D | jedem Zeichen, das keine Ziffer ist |
\W | jedem Zeichen, das kein Wortzeichen ist |
\S | jedem Zeichen, das kein Leerzeichen ist |
Ein praktischer Trick: \D (oder [^\d]) ermöglicht es, alles außer Ziffern zu entfernen — nützlich beim Bereinigen von Benutzereingaben wie Telefonnummern.
Der Punkt . und das s-Flag (dotAll)
Der Punkt . ist eine spezielle Zeichenklasse, die jedes einzelne Zeichen außer einem Zeilenumbruch abgleicht (\n, \r und einige Unicode-Zeilentrennzeichen).
Wenn der Punkt auch Zeilenumbrüche abgleichen soll, fügt man das s-Flag hinzu (kurz für „dotAll"):
Eine vollständige Liste der Regex-Flags wie g, i und s findet sich unter Muster und Flags.
Eigene Zeichenklassen: [...]
Wenn die Kürzel nicht passen, kann man eigene Klassen erstellen, indem man Zeichen in eckige Klammern schreibt. [abc] stimmt mit einem einzelnen a, b oder c überein.
Bereiche
Ein Bindestrich - zwischen zwei Zeichen erstellt einen Bereich: [a-z] stimmt mit jedem Kleinbuchstaben überein, [0-9] mit jeder Ziffer. Mehrere Bereiche und einzelne Zeichen können in einer Klasse kombiniert werden. (Für eine ausführlichere Betrachtung siehe Mengen und Bereiche.)
Negierte eigene Klassen [^...]
Ein Caret ^ als erstes Zeichen innerhalb der Klammern negiert die Klasse: [^a-z] stimmt mit jedem Zeichen überein, das kein Kleinbuchstabe ist.
Kürzel und Zeichen kombinieren
Kürzel-Klassen funktionieren auch innerhalb eigener Klassen. [\w.] stimmt mit einem Wortzeichen oder einem wörtlichen Punkt überein — nützlich für Token wie Versionsstrings oder Dateinamen.
Maskierung innerhalb von Zeichenklassen
Innerhalb von [...] verlieren die meisten Regex-Metazeichen ihre besondere Bedeutung, daher muss man sie in der Regel nicht maskieren. Zum Beispiel stimmt [.] mit einem wörtlichen Punkt überein — [\.] ist nicht nötig.
Einige Zeichen erfordern jedoch besondere Aufmerksamkeit:
- Bindestrich
-— bedeutet einen Bereich zwischen zwei Zeichen. Um einen wörtlichen Bindestrich zu erfassen, schreibt man ihn an erste oder letzte Stelle oder maskiert ihn:[-+],[+-]oder[+\-]. - Caret
^— negiert die Klasse nur, wenn es das erste Zeichen ist. An jeder anderen Stelle ([a^]) steht es für ein wörtliches^. - Schließende Klammer
]und Backslash\— diese müssen immer maskiert werden:[\]],[\\].
Ein falsch platzierter Bindestrich kann unbemerkt einen unerwünschten Bereich erzeugen. [a-z] ist ein Bereich, aber [z-a] wirft einen Syntaxfehler, und [%-/] stimmt mit jedem Zeichen überein, dessen Codepunkt zwischen % und / liegt. Im Zweifelsfall den Bindestrich maskieren oder an den Rand der Klasse setzen.
Unicode und das u-Flag
Standardmäßig erkennen \w, \d und \s nur ASCII-Zeichen. Mit dem u-Flag wird Unicode-bewusstes Matching und Property-Escapes wie \p{Letter} freigeschaltet, die Zeichen aus jeder Sprache abgleichen. Weitere Details finden sich unter das Unicode-Flag u und die Klasse \p.
Fazit
Zeichenklassen ermöglichen es, die Art des gesuchten Zeichens zu beschreiben, anstatt jede Möglichkeit einzeln aufzulisten:
\d \w \sstimmen mit Ziffern, Wortzeichen und Leerzeichen überein;\D \W \Sstimmen mit ihren jeweiligen Gegenteilen überein.- Der Punkt
.stimmt mit jedem Zeichen außer einem Zeilenumbruch überein — es sei denn, man fügt dass-Flag (dotAll) hinzu. - Eckige Klammern
[...]erstellen eigene Mengen; mit-werden Bereiche definiert, mit einem führenden^wird negiert, und die meisten Metazeichen sind innerhalb einer Klasse wörtlich zu nehmen.
Kombiniere diese Klassen mit Quantifizierern, um wiederholte Zeichen zu erfassen und leistungsstarke, lesbare Muster zu erstellen.