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: Entspricht einem der eingeschlossenen Zeichen. Sie können einen Zeichenbereich mit einem Bindestrich angeben, aber wenn der Bindestrich als erstes oder letztes Zeichen in den eckigen Klammern erscheint, wird er als wörtlicher Bindestrich angesehen, der in die Zeichenklasse aufgenommen werden soll, als normales Zeichen.

Zum Beispiel ist [abcd] das gleiche wie [a-d]. Beide finden das „b“ in „brisket“ und das „c“ in „chop“.

Zum Beispiel finden [abcd-] und [-abcd] das „b“ in „brisket“, das „c“ in „chop“ und das „-“ (Bindestrich) in „non-profit“.

Ein weiteres Beispiel: [\w-] ist das gleiche wie [A-Za-z0-9_-]. Beide finden das „b“ in „brisket“, das „c“ in „chop“ und das „n“ in „non-profit“.

Wenn das unicodeSets (v) Flag aktiviert ist, hat die Zeichenklasse zusätzliche Eigenschaften. Weitere Informationen finden Sie im Zeichenklassen-Referenz.

[^xyz]
[^a-c]

Negierte Zeichenklasse: Entspricht allem, was nicht in den eckigen Klammern eingeschlossen ist. Sie können einen Zeichenbereich 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 wörtlicher Bindestrich angesehen, der in die Zeichenklasse als normales Zeichen aufgenommen werden soll. Zum Beispiel ist [^abc] das gleiche wie [^a-c]. Sie finden "o" in "bacon" und "h" in "chop".

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

.

Wildcard: Entspricht jedem einzelnen Zeichen außer Zeilenendzeichen: \n, \r, \u2028 oder \u2029. Zum Beispiel entspricht /.y/ „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, werden auch Zeilenendzeichen einbezogen. Innerhalb einer Zeichenklasse verliert der Punkt seine spezielle Bedeutung und entspricht einem wörtlichen Punkt.

\d

Zifferzeichenklassen-Escape: Entspricht jeder Ziffer (arabische Zahl). Äquivalent zu [0-9]. Zum Beispiel entspricht /\d/ oder /[0-9]/ „2“ in „B2 ist die Suitennummer“.

\D

Nicht-Ziffer-Zeichenklassen-Escape: Entspricht jedem Zeichen, das keine Ziffer ist (arabische Zahl). Äquivalent zu [^0-9]. Zum Beispiel entspricht /\D/ oder /[^0-9]/ „B“ in „B2 ist die Suitennummer“.

\w

Wortzeichenklassen-Escape: Entspricht jedem alphanumerischen Zeichen aus dem lateinischen Alphabet, einschließlich des Unterstrichs. Äquivalent zu [A-Za-z0-9_]. Zum Beispiel entspricht /\w/ „a“ in „apple“, „5“ in „$5.28“, „3“ in „3D“ und „m“ in „Émanuel“.

\W

Nicht-Wortzeichenklassen-Escape: Entspricht jedem Zeichen, das kein Wortzeichen aus dem lateinischen Alphabet ist. Äquivalent zu [^A-Za-z0-9_]. Zum Beispiel, /\W/ oder /[^A-Za-z0-9_]/ entspricht „%“ in „50%“ und „É“ in „Émanuel“.

\s

Leerzeichen-Zeichenklassen-Escape: Entspricht einem einzelnen Leerzeichenzeichen, einschließlich Leerzeichen, Tabulator, Formfeed, Zeilenumbruch und andere Unicode-Leerzeichen. Äquivalent zu [\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Zum Beispiel entspricht /\s\w*/ „ bar“ in „foo bar“.

\S

Nicht-Leerzeichen-Zeichenklassen-Escape: Entspricht einem einzelnen Zeichen, das kein Leerzeichen ist. Äquivalent zu [^\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Zum Beispiel entspricht /\S\w*/ „foo“ in „foo bar“.

\t Entspricht einem horizontalen Tabulator.
\r Entspricht einem Wagenrücklauf.
\n Entspricht einem Zeilenumbruch.
\v Entspricht einem vertikalen Tabulator.
\f Entspricht einem Papier-Vormal.
[\b] Entspricht einem Rückschritt. Wenn Sie nach der Wortgrenzenbestätigung (\b) suchen, sehen Sie Bestätigungen.
\0 Entspricht einem NUL-Zeichen. Folgen Sie nicht mit einer weiteren Ziffer darauf.
\cX

Entspricht einem Steuerzeichen unter Verwendung Caret-Notation, wobei „X“ ein Buchstabe von A–Z oder a–z ist (entsprechend den Codepunkten U+0001U+001A). Zum Beispiel, /\cM\cJ/ entspricht „\r\n“.

\xhh Hex-Escape: Entspricht dem Zeichen mit dem Code hh (zwei hexadezimale Ziffern).
\uHHHH Unicode-Escape: Entspricht einer UTF-16-Codeeinheit mit dem Wert HHHH (vier hexadezimale Ziffern).
\u{H…H} Unicode-Codepunkt-Escape: (Nur wenn das u-Flag gesetzt ist.) Entspricht dem Zeichen mit dem Unicode-Wert U+H…H (1 bis 6 hexadezimale Ziffern).
\p{UnicodeProperty}, \P{UnicodeProperty}

Unicode-Zeichenklassen-Escape: Entspricht einem Zeichen basierend auf seinen Unicode-Zeichen-Eigenschaften: zum Beispiel Emoji-Zeichen, oder japanische Katakana-Zeichen, oder chinesische/japanische Han/Kanji-Zeichen, usw.).

\

Deutet an, dass das folgende Zeichen speziell behandelt oder "escaped" werden soll. 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 entspricht /b/ dem Zeichen „b“. Wenn Sie einen Backslash vor „b“ setzen, also mit /\b/, wird das Zeichen speziell, um eine Wortgrenze zu bedeuten.
  • Für Zeichen, die normalerweise speziell behandelt werden, zeigt es 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 vorhergehenden Zeichens passen sollen; zum Beispiel bedeutet /a*/, dass 0 oder mehr „a“s übereinstimmen sollen. Um * wörtlich zu erfassen, setzen Sie einen Backslash davor; zum Beispiel, /a\*/ entspricht „a*“.

Hinweis: Um dieses Zeichen wörtlich zu erfassen, "escapen" Sie es mit sich selbst. Um nach \ zu suchen, verwenden Sie /\\/.

x|y

Disjunktion: Entspricht entweder „x“ oder „y“. Jede Komponente, getrennt durch eine Pipe (|), wird als Alternative bezeichnet. Zum Beispiel, /green|red/ entspricht "green" in "green apple" und "red" in "red apple".

Hinweis: Eine Disjunktion ist eine andere Möglichkeit, "eine Menge von Auswahlmöglichkeiten" zu spezifizieren, aber es ist keine Zeichenklasse. Disjunktionen sind keine Atome — Sie müssen eine Gruppe verwenden, um sie zu einem größeren Muster zu machen. [abc] ist funktional gleichwertig mit (?:a|b|c).

Beispiele

Nach einer Serie von Ziffern suchen

In diesem Beispiel suchen wir nach einer Sequenz von 4 Ziffern mit \d{4}. \b steht für eine Wortgrenze (d.h. fangen Sie nicht in der Mitte einer Zahlenreihe an oder hören Sie dort auf zu passen).

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.

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

In diesem Beispiel suchen wir ein Wort, das mit dem Buchstaben A beginnt. \b steht für eine Wortgrenze (d.h. fangen Sie nicht in der Mitte eines Wortes an zu passen). [aA] steht für den Buchstaben „a“ oder „A“. \w+ steht für jedes Zeichen aus dem lateinischen Alphabet, mehrere Male (+ ist ein Quantifizierer). Da wir bereits so lange übereinstimmen, bis keine weiteren Wortzeichen mehr vorhanden sind, ist keine abschließende \b-Grenze erforderlich.

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.

Nach einem Wort suchen (aus Unicode-Zeichen)

Statt des lateinischen Alphabets können wir einen Bereich von Unicode-Zeichen verwenden, um ein Wort zu identifizieren (und so mit Texten in anderen Sprachen wie Russisch oder Arabisch umgehen können). 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 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.

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 zu beachten und so sowohl Groß- als auch Kleinbuchstaben der Vokale zu finden.

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