Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Zeichenklassen

Zeichenklassen unterscheiden Arten von Zeichen, wie zum Beispiel 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 auf eines der eingeschlossenen Zeichen. Sie können einen Bereich von Zeichen mit einem Bindestrich angeben, aber wenn der Bindestrich als erstes oder letztes Zeichen in den eckigen Klammern erscheint, wird er als literaler Bindestrich verstanden, 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, bietet die Zeichenklasse einige zusätzliche Funktionen. Weitere Informationen finden Sie im Zeichenklassen-Referenz.

[^xyz]
[^a-c]

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

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

.

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

\d

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

\D

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

\w

Wortzeichenklassenflucht: Passt auf jedes alphanumerische Zeichen aus dem grundlegenden lateinischen Alphabet, 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-Wortzeichenklassenflucht: Passt auf jedes Zeichen, das kein Wortzeichen aus dem grundlegenden lateinischen Alphabet ist. Entspricht [^A-Za-z0-9_]. Zum Beispiel, passen /\W/ oder /[^A-Za-z0-9_]/ auf "%" in "50%" und "É" in "Émanuel".

\s

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

\S

Nicht-Leerzeichenzeichenklassenflucht: Passt auf 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, /\S\w*/ passt 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 Formularvorschub.
[\b] Passt auf einen Rückschritt. Wenn Sie nach dem Wortgrenzen-Assertion (\b) suchen, sehen Sie Assertions.
\0 Passt auf ein NUL-Zeichen. Folgen Sie diesem nicht mit einer anderen Ziffer.
\cX

Passt auf ein Steuerzeichen unter Verwendung der Caret-Notation, wobei "X" ein Buchstabe von A–Z oder 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-Code-Einheit 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-Zeichenklassenflucht: Passt auf ein Zeichen basierend auf seinen Unicode-Zeichen Eigenschaften: zum Beispiel, Emoji-Zeichen, oder japanische katakana-Zeichen oder chinesische/japanische Hanji/Kanji-Zeichen, usw.).

\

Gibt an, dass das folgende Zeichen speziell behandelt oder "entkommen" werden sollte. Es verhält sich auf eine von zwei Arten.

  • Für Zeichen, die normalerweise wörtlich behandelt werden, zeigt dies an, dass das nächste Zeichen speziell ist und nicht wörtlich interpretiert werden soll. Zum Beispiel passt /b/ auf das Zeichen "b". Indem ein Rückwärtsschrägstrich vor "b" gestellt wird, also durch die Verwendung von /\b/, wird das Zeichen speziell und bedeutet, auf eine Wortgrenze zu passen.
  • Für Zeichen, die normalerweise speziell behandelt werden, zeigt dies an, dass das nächste Zeichen nicht speziell ist und wörtlich interpretiert werden soll. Zum Beispiel ist "*" ein spezielles Zeichen, das bedeutet, dass 0 oder mehr Vorkommen des vorangehenden Zeichens passen sollten; zum Beispiel, /a*/ bedeutet, 0 oder mehr "a"s zu passen. Um auf * wörtlich zu passen, setzen Sie einen Rückwärtsschrägstrich davor; zum Beispiel, /a\*/ passt auf "a*".

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

x|y

Disjunktion: Passt entweder auf "x" oder "y". Jede durch ein Pipe-Zeichen (|) getrennte Komponente wird als Alternative bezeichnet. Zum Beispiel, passt /green|red/ auf "green" in "green apple" und "red" in "red apple".

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

Beispiele

Suche nach einer Reihe von Ziffern

In diesem Beispiel passen wir eine Folge von 4 Ziffern mit \d{4} an. \b gibt eine Wortgrenze an (d.h. nicht in der Mitte einer Zahlenfolge starten 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 im Zeichenklassenflucht-Referenz.

Suche nach einem Wort (aus dem lateinischen Alphabet), das mit A beginnt

In diesem Beispiel passen wir ein Wort an, das mit dem Buchstaben A beginnt. \b gibt eine Wortgrenze an (d.h. nicht in der Mitte eines Wortes starten). [aA] gibt den Buchstaben "a" oder "A" an. \w+ steht für jedes Zeichen aus dem lateinischen Alphabet, mehrmals ( + ist ein Quantifizierer). Beachten Sie, dass es nicht notwendig ist, eine abschließende \b-Grenze zu setzen, da wir bereits passen, bis keine Wortzeichen mehr vorhanden sind.

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 im Zeichenklassenflucht-Referenz.

Suche nach einem Wort (aus Unicode-Zeichen)

Anstatt des lateinischen Alphabets können wir einen Bereich von Unicode-Zeichen verwenden, um ein Wort zu identifizieren (und somit mit Texten in anderen Sprachen wie Russisch oder Arabisch umzugehen). Die "Basic Multilingual Plane" von Unicode enthält die meisten der weltweit verwendeten Zeichen, 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 im Unicode-Zeichenklassenflucht-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 casesensitiv zu machen, sodass 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