Zeichenklassen

Zeichenklassen unterscheiden Arten von Zeichen, wie z. B. die Unterscheidung zwischen Buchstaben und Ziffern.

Probieren Sie es aus

const chessStory = "He played the King in a8 and she moved her Queen in c2.";
const regexpCoordinates = /\w\d/g;
console.log(chessStory.match(regexpCoordinates));
// Expected output: Array [ 'a8', 'c2']

const moods = "happy 🙂, confused 😕, sad 😢";
const regexpEmoticons = /[\u{1F600}-\u{1F64F}]/gu;
console.log(moods.match(regexpEmoticons));
// Expected output: Array ['🙂', '😕', '😢']

Typen

Zeichen Bedeutung
[xyz]
[a-c]

Zeichenklasse: Passt jedes der eingeschlossenen Zeichen. Sie können durch die Verwendung eines Bindestrichs einen Bereich von Zeichen angeben. Erscheint der Bindestrich jedoch als erstes oder letztes Zeichen in den eckigen Klammern, wird er als ein normaler Bindestrich interpretiert und in die Zeichenklasse aufgenommen.

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

Zum Beispiel passen [abcd-] und [-abcd] 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 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 Eigenschaften. Weitere Informationen finden Sie im Zeichenklassen-Referenz.

[^xyz]
[^a-c]

Negierte Zeichenklasse: Passt alles, was nicht in den eckigen Klammern enthalten ist. Sie können einen Bereich von Zeichen durch die Verwendung eines Bindestrichs angeben. Wenn der Bindestrich jedoch das erste Zeichen nach dem ^ oder das letzte Zeichen in den eckigen Klammern ist, wird er als ein normaler Bindestrich interpretiert und in die Zeichenklasse aufgenommen. Zum Beispiel ist [^abc] dasselbe wie [^a-c]. Sie passen zuerst "o" in "bacon" und "h" in "chop".

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

.

Wildcard: Passt jedes einzelne Zeichen, außer Zeilenumbrüchen: \n, \r, \u2028 oder \u2029. Zum Beispiel passt /.y/ "my" und "ay", aber nicht "yes", in "yes make my day", da kein Zeichen vor "y" in "yes" steht. Wenn das dotAll (s)-Flag aktiviert ist, passt es auch Zeilenumbrüche. Innerhalb einer Zeichenklasse verliert der Punkt seine besondere Bedeutung und passt einen Literalpunkt.

\d

Ziffernzeichenklasse: Passt jede Ziffer (arabische Zahl). Entspricht [0-9]. Zum Beispiel passt /\d/ oder /[0-9]/ "2" in "B2 is the suite number".

\D

Nicht-Ziffern-Zeichenklasse: Passt jedes Zeichen, das keine Ziffer (arabische Zahl) ist. Entspricht [^0-9]. Zum Beispiel passt /\D/ oder /[^0-9]/ "B" in "B2 is the suite number".

\w

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

\W

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

\s

Leerzeichen-Zeichenklasse: Passt ein Einzelzeichen für Leerraum, einschließlich Leerzeichen, Tabulator, Formfeed, Zeilenumbruch und andere Unicode-Leerzeichen. Entspricht [\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Zum Beispiel passt /\s\w*/ " bar" in "foo bar".

\S

Nicht-Leerzeichen-Zeichenklasse: Passt ein einzelnes Zeichen, das kein Leerzeichen ist. Entspricht [^\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Zum Beispiel passt /\S\w*/ "foo" in "foo bar".

\t Passt einen horizontalen Tabulator.
\r Passt einen Wagenrücklauf.
\n Passt einen Zeilenumbruch.
\v Passt einen vertikalen Tabulator.
\f Passt einen Seitenvorschub.
[\b] Passt einen Rückschritt. Wenn Sie die Wortgrenzen-Assertion (\b) suchen, siehe Assertions.
\0 Passt ein NUL-Zeichen. Dieses darf nicht durch eine andere Ziffer gefolgt werden.
\cX

Passt ein Steuerzeichen mittels Caretschreibweise, wobei "X" ein Buchstabe von A–Z ist (entsprechend den Codepunkten U+0001U+001A). Zum Beispiel passt /\cM\cJ/ "\r\n".

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

Unicode-Zeichenklassen-Escape: Passt ein Zeichen basierend auf dessen Unicode-Zeicheneigenschaften: z. B. Emoji-Zeichen, japanische Katakana-Zeichen, oder chinesische/japanische Han/Kanji-Zeichen, usw.).

\

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

  • Für Zeichen, die normalerweise wörtlich behandelt werden, zeigt es an, dass das nächste Zeichen besonders ist und nicht wörtlich angesehen werden soll. Zum Beispiel passt /b/ das Zeichen "b". Durch das Setzen eines Backslashes vor "b", d. h. mit /\b/, wird das Zeichen speziell, um eine Wortgrenze zu markieren.
  • Für Zeichen, die normalerweise besonders behandelt werden, zeigt es an, dass das nächste Zeichen nicht besonders ist und wörtlich behandelt werden soll. Zum Beispiel ist "*" ein besonderes Zeichen, das 0 oder mehr Vorkommen des vorherigen Zeichens bedeutet; zum Beispiel bedeutet /a*/, dass 0 oder mehr "a"s übereinstimmen. Um * wörtlich zu machen, setzen Sie einen Backslash davor; zum Beispiel passt /a\*/ "a*".

Hinweis: Um dieses Zeichen wörtlich zu matchen, escapen Sie es mit sich selbst. Mit anderen Worten: Um nach \ zu suchen, verwenden Sie /\\/.

x|y

Alternativen: Passt entweder "x" oder "y". Jeder Bestandteil, getrennt durch einen Pipe (|), wird als Alternative bezeichnet. Zum Beispiel passt /green|red/ "green" in "green apple" und "red" in "red apple".

Hinweis: Eine Alternative ist eine andere Methode, um "eine Auswahl von Möglichkeiten" anzugeben, aber es ist keine Zeichenklasse. Alternativen 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

Eine Zahlenreihe suchen

In diesem Beispiel suchen wir eine Sequenz aus 4 Ziffern mit \d{4}. \b zeigt eine Wortgrenze an (d. h. nicht innerhalb einer Zahlenreihe zu starten oder zu beenden).

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.

Ein Wort (aus dem lateinischen Alphabet) suchen, das mit A beginnt

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 zu starten). [aA] zeigt den Buchstaben "a" oder "A" an. \w+ zeigt ein beliebiges Zeichen aus dem lateinischen Alphabet mehrere Male an (+ ist ein Quantifizierer). Beachten Sie, dass, da wir bereits bis zu keinen weiteren Wortzeichen passen, eine abschließende \b-Grenze nicht erforderlich ist.

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.

Ein Wort (aus Unicode-Zeichen) suchen

Statt des lateinischen Alphabets können wir eine Vielzahl von Unicode-Zeichen verwenden, um ein Wort zu identifizieren (und somit Text in anderen Sprachen wie Russisch oder Arabisch zu verarbeiten). Die "Grundlegende Mehrsprachige Ebene" von Unicode enthält die meisten Zeichen, die weltweit verwendet werden, und wir können Zeichenklassen und Bereiche verwenden, um Wörter zu finden, die mit diesen Zeichen geschrieben wurden.

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.

Vokale zählen

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 nicht zwischen Groß- und Kleinschreibung zu unterscheiden, damit es sowohl Groß- als auch Kleinbuchstaben-Vokale findet.

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