Signatur
Beschreibung
Eine Zeichenklasse (englisch character class) steht in einem regulären Ausdruck für genau ein Zeichen aus einer selbst festgelegten Menge. [aeiou] passt auf einen beliebigen kleinen Vokal, [0-9a-f] auf eine Hexadezimalziffer. Steht direkt nach der öffnenden Klammer ein ^, wird die Klasse negiert: [^0-9] passt auf jedes Zeichen, das keine Ziffer ist, also auch auf Zeilenumbrüche.
Innerhalb der Klammern gelten eigene Regeln. Die meisten Sonderzeichen wie ., *, +, ?, (, ), | und $ verlieren ihre besondere Bedeutung und stehen einfach für sich selbst. Eine Sonderrolle haben nur:
\für Escapes wie\d,\w,\s,\p{…},\]oder\-], das die Klasse beendet^, aber nur ganz am Anfang (Negation)-zwischen zwei Zeichen, das einen Bereich bildet (a-z). Am Anfang oder Ende der Klasse steht es für einen normalen Bindestrich.
Zwei Sonderfälle: [] passt auf nichts und lässt den Treffer deshalb immer scheitern. [^] passt auf jedes Zeichen, auch auf Zeilenumbrüche. Das ist eine alte Alternative zum Flag s (dotAll).
Mit dem Flag v (unicodeSets, ES2024) können Zeichenklassen mehr: Sie lassen sich verschachteln ([[a-z][0-9]]), als Schnittmenge (&&) oder Differenz (--) kombinieren und mit \q{…} ganze Zeichenfolgen enthalten. So lässt sich etwa „alle Buchstaben außer ASCII“ als [\p{L}--[a-zA-Z]] schreiben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $Zeichen | Literalzeichen | Escape | Einzelne Zeichen, die zur Menge gehören, z. B. abc. Escapes wie \d, \w, \s, \p{L} oder \u00e4 sind erlaubt. |
|
| $Bereich | Zeichen-Zeichen | Ein Bereich wie a-z oder \u0400-\u04FF. Er umfasst alle Codepunkte von Start bis Ende einschließlich. Ist der Start größer als das Ende, entsteht ein SyntaxError. |
|
| $^ | Negationszeichen | Muss direkt nach [ stehen. Dann passt die Klasse auf jedes Zeichen, das nicht in der Menge liegt. |
|
| $&& | Operator (nur mit Flag v) | Schnittmenge zweier Klassen, z. B. [\p{L}&&\p{Script=Greek}]. |
|
| $-- | Operator (nur mit Flag v) | Differenz zweier Klassen, z. B. [\w--\d] (Wortzeichen ohne Ziffern). |
|
| $\q{…} | String-Literal (nur mit Flag v) | Nimmt ganze Zeichenfolgen in die Klasse auf, z. B. [\q{ch|sch}a-z]. Nicht erlaubt in negierten Klassen. |
Rückgabewert
u/v einen ganzen Codepunkt. Mit \q{…} kann sie auch eine ganze Zeichenfolge verbrauchen. Das Ergebnis hängt von der aufrufenden Methode ab, etwa test(), match() oder replace().Beispiele
Hexadezimalen Farbcode prüfen
const isHexColor = (str) => /^#[0-9a-f]{6}$/i.test(str);
console.log(isHexColor('#1A3fC0'));
console.log(isHexColor('#12G456'));
Negierte Klasse: unerwünschte Zeichen entfernen
const input = 'Hallo, Welt! 123 – Grüße';
const onlyLetters = input.replace(/[^a-zäöüß]/gi, '');
console.log(onlyLetters);
Bindestrich und Sonderzeichen literal verwenden
// '-' am Ende, '.' und '+' brauchen in der Klasse kein Escape
const local = /^[\w.+-]+$/;
console.log(local.test('max.mustermann+news-2024'));
console.log(local.test('max mustermann'));
[^] passt auch auf Zeilenumbrüche
const text = 'Start\nMitte\nEnde';
console.log(/Start.*Ende/.test(text)); // '.' passt nicht auf \n
console.log(/Start[^]*Ende/.test(text)); // [^] passt auf alles
Flag v: Differenz und Schnittmenge (ES2024)
// Alle Buchstaben außer ASCII-Buchstaben
const nonAscii = /[\p{L}--[a-zA-Z]]/gv;
console.log('Straße in Köln'.match(nonAscii));
// Griechische Buchstaben (Schnittmenge)
const greek = /[\p{Script=Greek}&&\p{L}]+/v;
console.log('Formel: αβγ = 42'.match(greek)[0]);
Emoji korrekt abgleichen mit Flag u
console.log(/^[😀😎]$/.test('😀')); // ohne u: Surrogat-Hälften
console.log(/^[😀😎]$/u.test('😀')); // mit u: ganzer Codepunkt