Literales Zeichen: a, b
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Ein literales Zeichen gibt an, dass genau dieses Zeichen im Eingabetext gefunden werden soll.
Syntax
c
Parameter
c-
Ein einzelnes Zeichen, das nicht zu den unten beschriebenen Syntaxzeichen gehört.
Beschreibung
In regulären Ausdrücken können die meisten Zeichen literal vorkommen. Sie bilden normalerweise die einfachsten Bausteine von Mustern. Hier ist beispielsweise ein Muster aus dem Beispiel zum Entfernen von HTML-Tags:
const pattern = /<.+?>/g;
In diesem Beispiel werden ., + und ? als Syntaxzeichen bezeichnet. Sie haben in regulären Ausdrücken eine besondere Bedeutung. Die übrigen Zeichen im Muster (< und >) sind literale Zeichen. Sie entsprechen sich selbst im Eingabetext: der öffnenden und der schließenden spitzen Klammer.
Die folgenden Zeichen sind in regulären Ausdrücken Syntaxzeichen und können daher nicht als literale Zeichen vorkommen:
Innerhalb von Zeichenklassen können weitere Zeichen literal vorkommen. Weitere Informationen finden Sie auf der Seite über Zeichenklassen. Beispielsweise entsprechen sowohl \. als auch [.] einem literalen .. In Zeichenklassen im v-Modus ist jedoch eine andere Gruppe von Zeichen als Syntaxzeichen reserviert. Die folgende Tabelle bietet eine möglichst vollständige Übersicht über ASCII-Zeichen und darüber, ob sie in verschiedenen Kontexten mit oder ohne Escape-Zeichen vorkommen dürfen. „✅“ bedeutet, dass das Zeichen für sich selbst steht, „❌“ bedeutet, dass es einen Syntaxfehler auslöst, und „⚠️“ bedeutet, dass das Zeichen gültig ist, aber eine andere Bedeutung hat.
| Zeichen | Außerhalb von Zeichenklassen im u- oder v-Modus |
In Zeichenklassen im u-Modus |
In Zeichenklassen im v-Modus |
|||
|---|---|---|---|---|---|---|
| Ohne Escape-Zeichen | Mit Escape-Zeichen | Ohne Escape-Zeichen | Mit Escape-Zeichen | Ohne Escape-Zeichen | Mit Escape-Zeichen | |
123456789 "' |
✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
!#%&,:;<=>@`~ |
✅ | ❌ | ✅ | ❌ | ✅ | ✅ |
] |
❌ | ✅ | ❌ | ✅ | ❌ | ✅ |
()[{} |
❌ | ✅ | ✅ | ✅ | ❌ | ✅ |
*+? |
❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
/ |
✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
0DSWbdfnrstvw |
✅ | ⚠️ | ✅ | ⚠️ | ✅ | ⚠️ |
ABZz |
✅ | ⚠️ | ✅ | ❌ | ✅ | ❌ |
$. |
⚠️ | ✅ | ✅ | ✅ | ✅ | ✅ |
| |
⚠️ | ✅ | ✅ | ✅ | ❌ | ✅ |
- |
✅ | ❌ | ✅⚠️ | ✅ | ❌⚠️ | ✅ |
^ |
⚠️ | ✅ | ✅⚠️ | ✅ | ✅⚠️ | ✅ |
\ |
❌⚠️ | ✅ | ❌⚠️ | ✅ | ❌⚠️ | ✅ |
Hinweis:
Die Zeichen, die in Zeichenklassen im v-Modus sowohl mit als auch ohne Escape-Zeichen vorkommen können, sind genau diejenigen, die als „doppelte Satzzeichen“ verboten sind. Weitere Informationen finden Sie unter Zeichenklassen im v-Modus.
Wenn Sie ein Syntaxzeichen literal finden möchten, müssen Sie es mit einem Backslash (\) escapen. Um beispielsweise ein literales * zu finden, müssen Sie \* in das Muster schreiben. Die Verwendung von Syntaxzeichen als literale Zeichen führt entweder zu unerwarteten Ergebnissen oder zu Syntaxfehlern. Beispielsweise ist /*/ kein gültiger regulärer Ausdruck, weil dem Quantifizierer kein Muster vorausgeht. Im nicht Unicode-bewussten Modus können ], { und } literal vorkommen, wenn sie nicht als Ende einer Zeichenklasse oder als Begrenzungszeichen eines Quantifizierers interpretiert werden können. Dies ist eine veraltete Syntax zur Wahrung der Webkompatibilität, auf die Sie sich nicht verlassen sollten.
Bestimmte Zeichen, die keine Syntaxzeichen sind, können in Literalen regulärer Ausdrücke nicht als literale Zeichen angegeben werden. / kann außerhalb von Zeichenklassen nicht als literales Zeichen in einem Literal eines regulären Ausdrucks vorkommen, weil / als Begrenzungszeichen des Literals selbst verwendet wird. Wenn Sie ein literales / finden möchten, müssen Sie es dort als \/ escapen. Innerhalb einer Zeichenklasse kann / ohne Escape-Zeichen vorkommen, wie in /[/]/ (sofern das v-Flag nicht gesetzt ist). Auch Zeilenendezeichen können nicht als literale Zeichen in einem Literal eines regulären Ausdrucks vorkommen, weil sich ein Literal nicht über mehrere Zeilen erstrecken kann. Verwenden Sie stattdessen ein Zeichen-Escape wie \n. Diese Einschränkungen für Begrenzungs- und Zeilenendezeichen gelten nicht bei Verwendung des RegExp()-Konstruktors. Allerdings haben String-Literale eigene Escape-Regeln (beispielsweise bezeichnet "\\" tatsächlich ein einzelnes Backslash-Zeichen, sodass new RegExp("\\*") und /\*/ gleichwertig sind).
Im nicht Unicode-bewussten Modus wird das Muster als Folge von UTF-16-Codeeinheiten interpretiert. Das bedeutet, dass Surrogatpaare tatsächlich zwei literale Zeichen darstellen. In Kombination mit anderen Funktionen führt dies zu unerwartetem Verhalten:
/^[😄]$/.test("😄"); // false, because the pattern is interpreted as /^[\ud83d\ude04]$/
/^😄+$/.test("😄😄"); // false, because the pattern is interpreted as /^\ud83d\ude04+$/
Im Unicode-bewussten Modus wird das Muster als Folge von Unicode-Codepunkten interpretiert und Surrogatpaare werden nicht aufgeteilt. Daher sollten Sie vorzugsweise immer das u-Flag verwenden.
Beispiele
>Literale Zeichen verwenden
Das folgende Beispiel stammt aus Zeichen-Escape. Die Zeichen a und b sind literale Zeichen im Muster. \n ist ein Zeichen-Escape, weil es in einem Literal eines regulären Ausdrucks nicht literal vorkommen kann.
const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # prod-PatternCharacter> |
Browser-Kompatibilität
Siehe auch
- Leitfaden zu Zeichenklassen
- Reguläre Ausdrücke
- Zeichen-Escape:
\n,\u{...}