W3docs

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.

KlasseStimmt überein mitEntspricht
\deiner Ziffer[0-9]
\weinem Wortzeichen: Buchstabe, Ziffer oder Unterstrich[A-Za-z0-9_]
\seinem Leerzeichen: Leertaste, Tab \t, Zeilenumbruch \n usw.
javascript— editable

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":

javascript— editable

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.

KlasseStimmt überein mit
\Djedem Zeichen, das keine Ziffer ist
\Wjedem Zeichen, das kein Wortzeichen ist
\Sjedem Zeichen, das kein Leerzeichen ist
javascript— editable

Ein praktischer Trick: \D (oder [^\d]) ermöglicht es, alles außer Ziffern zu entfernen — nützlich beim Bereinigen von Benutzereingaben wie Telefonnummern.

javascript— editable

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).

javascript— editable

Wenn der Punkt auch Zeilenumbrüche abgleichen soll, fügt man das s-Flag hinzu (kurz für „dotAll"):

javascript— editable

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.

javascript— editable

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.)

javascript— editable

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.

javascript— editable

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.

javascript— editable

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: [\]], [\\].
javascript— editable
Warnung

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 \s stimmen mit Ziffern, Wortzeichen und Leerzeichen überein; \D \W \S stimmen mit ihren jeweiligen Gegenteilen überein.
  • Der Punkt . stimmt mit jedem Zeichen außer einem Zeilenumbruch überein — es sei denn, man fügt das s-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.

Übungen

Übung
Welche der folgenden sind gültige Zeichenklassen in JavaScript?
Welche der folgenden sind gültige Zeichenklassen in JavaScript?
Was this page helpful?