Zeichenklassen

Zeichenklassen unterscheiden Arten von Zeichen, zum Beispiel zur Unterscheidung zwischen Buchstaben und Ziffern.

Probieren Sie es aus

Typen

Zeichen Bedeutung
[xyz]
[a-c]

Zeichenklasse: Passt auf eines der eingeschlossenen Zeichen. Sie können einen Bereich von Zeichen angeben, indem Sie einen Bindestrich verwenden, aber wenn der Bindestrich als erstes oder letztes Zeichen in den eckigen Klammern erscheint, wird er als literaler Bindestrich betrachtet, der in die Zeichenklasse als normales Zeichen aufgenommen wird.

Zum Beispiel ist [abcd] dasselbe wie [a-d]. Sie passen auf das "b" in "brisket" und das "c" in "chop".

Zum Beispiel passen [abcd-] und [-abcd] auf das "b" in "brisket", das "c" in "chop" und den "-" (Bindestrich) in "non-profit".

Zum Beispiel ist [\w-] dasselbe wie [A-Za-z0-9_-]. Beide passen auf das "b" in "brisket", das "c" in "chop" und das "n" in "non-profit".

Wenn das unicodeSets (v) Flag aktiviert ist, hat die Zeichenklasse einige zusätzliche Funktionen. Siehe die Zeichenklasse Referenz für weitere Informationen.

[^xyz]
[^a-c]

Negierte Zeichenklasse: Passt auf alles, was nicht in den eckigen Klammern eingeschlossen ist. Sie können einen Bereich von Zeichen angeben, indem Sie einen Bindestrich verwenden, aber wenn der Bindestrich als erstes Zeichen nach dem ^ oder als letztes Zeichen in den eckigen Klammern erscheint, wird er als literaler Bindestrich betrachtet, der in die Zeichenklasse als normales Zeichen aufgenommen wird. Zum Beispiel ist [^abc] dasselbe wie [^a-c]. Sie passen auf "o" in "bacon" und "h" in "chop".

Hinweis: Das ^ Zeichen kann auch den Anfang der Eingabe anzeigen.

.

Wildcard: Passt auf jedes einzelne Zeichen außer Zeilenendzeichen: \n, \r, \u2028 oder \u2029. Zum Beispiel passt /.y/ auf "my" und "ay", aber nicht "yes", in "yes make my day", da es kein Zeichen vor "y" in "yes" gibt. Wenn das dotAll (s) Flag aktiviert ist, passen auch Zeilenendzeichen. Innerhalb einer Zeichenklasse verliert der Punkt seine spezielle Bedeutung und passt auf einen literalen Punkt.

\d

Ziffern-Zeichenklassen-Escape: Passt auf jede Ziffer (arabische Ziffer). Entspricht [0-9]. Zum Beispiel passt /\d/ oder /[0-9]/ auf "2" in "B2 ist die Suite-Nummer".

\D

Nicht-Ziffern-Zeichenklassen-Escape: Passt auf jedes Zeichen, das keine Ziffer (arabische Ziffer) ist. Entspricht [^0-9]. Zum Beispiel passt /\D/ oder /[^0-9]/ auf "B" in "B2 ist die Suite-Nummer".

\w

Wort-Zeichenklassen-Escape: Passt auf jedes alphanumerische Zeichen aus dem lateinischen Grundalphabet, einschließlich des Unterstrichs. Entspricht [A-Za-z0-9_]. Zum Beispiel passt /\w/ auf "a" in "apple", "5" in "$5.28", "3" in "3D" und "m" in "Émanuel".

\W

Nicht-Wort-Zeichenklassen-Escape: Passt auf jedes Zeichen, das kein Wortzeichen aus dem lateinischen Grundalphabet ist. Entspricht [^A-Za-z0-9_]. Zum Beispiel passt /\W/ oder /[^A-Za-z0-9_]/ auf "%" in "50%" und "É" in "Émanuel".

\s

Leerzeichen-Zeichenklassen-Escape: Passt auf ein einzelnes Leerzeichen, einschließlich Leerzeichen, Tabulator, Seitenumbruch, Zeilenumbruch und anderer Unicode-Leerzeichen. Entspricht [\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Zum Beispiel passt /\s\w*/ auf " bar" in "foo bar".

\S

Nicht-Leerzeichen-Zeichenklassen-Escape: Passt auf ein einzelnes Zeichen außer Leerzeichen. Entspricht [^\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Zum Beispiel passt /\S\w*/ auf "foo" in "foo bar".

\t Passt auf einen horizontalen Tabulator.
\r Passt auf einen Wagenrücklauf.
\n Passt auf einen Zeilenumbruch.
\v Passt auf einen vertikalen Tabulator.
\f Passt auf einen Seitenvorschub.
[\b] Passt auf einen Rückschritt. Wenn Sie nach der Wortgrenzen-Bestätigung (\b) suchen, siehe Bestätigungen.
\0 Passt auf ein NUL-Zeichen. Folgen Sie dies nicht mit einer weiteren Ziffer.
\cX

Passt auf ein Steuerzeichen unter Verwendung der Caret-Notation, wobei "X" ein Buchstabe von A–Z ist (entsprechend den Codepunkten U+0001U+001A). Zum Beispiel, /\cM\cJ/ passt auf "\r\n".

\xhh Passt auf das Zeichen mit dem Code hh (zwei hexadezimale Ziffern).
\uhhhh Passt auf eine UTF-16-Codierungseinheit mit dem Wert hhhh (vier hexadezimale Ziffern).
\u{hhhh} oder \u{hhhhh} (Nur wenn das u Flag gesetzt ist.) Passt auf das Zeichen mit dem Unicode-Wert U+hhhh oder U+hhhhh (hexadezimale Ziffern).
\p{UnicodeProperty}, \P{UnicodeProperty}

Unicode-Zeichenklassen-Escape: Passt auf ein Zeichen basierend auf seinen Unicode-Zeicheneigenschaften: zum Beispiel Emoji-Zeichen oder japanische Katakana-Zeichen oder chinesische/japanische Han/Kanji-Zeichen, usw.).

\

Gibt an, dass das folgende Zeichen speziell behandelt oder "escaped" werden soll. Es verhält sich auf zwei Arten.

  • Für Zeichen, die normalerweise buchstäblich behandelt werden, gibt es an, dass das nächste Zeichen speziell ist und nicht buchstäblich interpretiert werden soll. Zum Beispiel passt /b/ auf das Zeichen "b". Durch Platzieren eines Rückwärtsschrägstrichs vor "b", das heißt durch Verwendung von /\b/, wird das Zeichen speziell, um auf eine Wortgrenze zu passen.
  • Für Zeichen, die normalerweise speziell behandelt werden, gibt es an, dass das nächste Zeichen nicht speziell ist und buchstäblich interpretiert werden soll. Zum Beispiel ist "*" ein spezielles Zeichen, das bedeutet, dass 0 oder mehr Vorkommen des vorhergehenden Zeichens übereinstimmen sollen; zum Beispiel bedeutet /a*/ 0 oder mehr "a"s sollen passen. Um * buchstäblich zu erkennen, versehen Sie es mit einem Rückwärtsschrägstrich; zum Beispiel passt /a\*/ auf "a*".

Hinweis: Um dieses Zeichen buchstäblich zu suchen, escapen Sie es mit sich selbst. Mit anderen Worten, um nach \ zu suchen, verwenden Sie /\\/.

x|y

Disjunktion: Passt entweder auf "x" oder "y". Jedes Element, getrennt durch eine Pipe (|), wird Alternative genannt. Zum Beispiel, /green|red/ passt auf "green" in "green apple" und "red" in "red apple".

Hinweis: Eine Disjunktion ist eine weitere Möglichkeit, "eine Reihe von Optionen" anzugeben, aber es ist keine Zeichenklasse. Disjunktionen sind keine Atome — Sie müssen eine Gruppe verwenden, um sie Teil eines größeren Musters zu machen. [abc] ist funktional äquivalent zu (?:a|b|c).

Beispiele

Auf der Suche nach einer Reihe von Ziffern

In diesem Beispiel suchen wir eine Folge von 4 Ziffern mit \d{4}. \b zeigt eine Wortgrenze an (d.h. nicht in der Mitte einer Ziffernfolge beginnen oder enden).

js
const randomData = "015 354 8787 687351 3512 8735";
const regexpFourDigits = /\b\d{4}\b/g;

console.table(randomData.match(regexpFourDigits));
// ['8787', '3512', '8735']

Weitere Beispiele finden Sie in der Zeichenklassen-Escape Referenz.

Auf der Suche nach einem Wort (aus dem lateinischen Alphabet) beginnend mit A

In diesem Beispiel suchen wir ein Wort, das mit dem Buchstaben A beginnt. \b zeigt eine Wortgrenze an (d.h. nicht in der Mitte eines Wortes beginnen). [aA] zeigt den Buchstaben "a" oder "A" an. \w+ zeigt beliebige Zeichen aus dem lateinischen Alphabet mehrmals an (+ ist ein Quantifikator). Da wir bereits bis zum Ende der Wortzeichen übereinstimmen, ist eine abschließende \b-Grenze nicht notwendig.

js
const aliceExcerpt =
  "I'm sure I'm not Ada,' she said, 'for her hair goes in such long ringlets, and mine doesn't go in ringlets at all.";
const regexpWordStartingWithA = /\b[aA]\w+/g;

console.table(aliceExcerpt.match(regexpWordStartingWithA));
// ['Ada', 'and', 'at', 'all']

Weitere Beispiele finden Sie in der Zeichenklassen-Escape Referenz.

Auf der Suche nach einem Wort (aus Unicode Zeichen)

Anstelle des lateinischen Alphabets können wir einen Bereich von Unicode-Zeichen verwenden, um ein Wort zu identifizieren (somit in der Lage, mit Text in anderen Sprachen wie Russisch oder Arabisch umzugehen). Die "Basic Multilingual Plane" von Unicode enthält die meisten der weltweit benutzten Zeichen und wir können Zeichenklassen und Bereiche verwenden, um Wörter zu erkennen, die mit diesen Zeichen geschrieben sind.

js
const nonEnglishText = "Приключения Алисы в Стране чудес";
const regexpBMPWord = /([\u0000-\u0019\u0021-\uFFFF])+/gu;
// BMP goes through U+0000 to U+FFFF but space is U+0020

console.table(nonEnglishText.match(regexpBMPWord));
["Приключения", "Алисы", "в", "Стране", "чудес"];

Weitere Beispiele finden Sie in der Unicode-Zeichenklassen-Escape Referenz.

Zählen von Vokalen

In diesem Beispiel zählen wir die Anzahl der Vokale (A, E, I, O, U, Y) in einem Text. Das g-Flag wird verwendet, um alle Vorkommen des Musters im Text zu finden. Das i-Flag wird verwendet, um das Muster case-insensitive zu machen, so dass es sowohl Groß- als auch Kleinbuchstaben-Vokale erfasst.

js
const aliceExcerpt =
  "There was a long silence after this, and Alice could only hear whispers now and then.";
const regexpVowels = /[aeiouy]/gi;

console.log("Number of vowels:", aliceExcerpt.match(regexpVowels).length);
// Number of vowels: 26

Siehe auch