Literalzeichen: a, b
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Ein Literalzeichen spezifiziert genau sich selbst, um im Eingabetext gefunden zu werden.
Syntax
c
Parameter
c
-
Ein einzelnes Zeichen, das keines der unten beschriebenen Syntaxzeichen ist.
Beschreibung
In regulären Ausdrücken können die meisten Zeichen buchstäblich auftreten. Sie sind in der Regel die grundlegendsten Bausteine von Mustern. Zum Beispiel, hier ist ein Muster aus dem Beispiel Entfernen von HTML-Tags:
const pattern = /<.+?>/g;
In diesem Beispiel werden .
, +
, und ?
als Syntaxzeichen bezeichnet. Sie haben spezielle Bedeutungen in regulären Ausdrücken. Die restlichen Zeichen im Muster (<
und >
) sind Literalzeichen. Sie stimmen im Eingabetext mit sich selbst überein: die linken und rechten spitzen Klammern.
Die folgenden Zeichen sind Syntaxzeichen in regulären Ausdrücken und können nicht als Literalzeichen auftreten:
Innerhalb von Zeichengruppen können mehr Zeichen buchstäblich auftreten. Weitere Informationen finden Sie auf der Seite Character class. Zum Beispiel stimmen \.
und [.]
beide mit einem buchstäblichen .
überein. In v
-Modus-Zeichengruppen jedoch gibt es eine andere Gruppe von Zeichen, die als Syntaxzeichen reserviert sind. Um umfassend zu sein, ist unten eine Tabelle von ASCII-Zeichen und ob sie in verschiedenen Kontexten maskiert oder unmaskiert auftreten können, wobei "✅" bedeutet, dass das Zeichen sich selbst darstellt, "❌" bedeutet, dass es einen Syntaxfehler verursacht, und "⚠️" bedeutet, dass das Zeichen gültig ist, aber etwas anderes als sich selbst bedeutet.
Zeichen | Außerhalb von Zeichengruppen im u - oder v -Modus |
In u -Modus-Zeichengruppen |
In v -Modus-Zeichengruppen |
|||
---|---|---|---|---|---|---|
Unmaskiert | Maskiert | Unmaskiert | Maskiert | Unmaskiert | Maskiert | |
123456789 "' |
✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
!#%&,:;<=>@`~ |
✅ | ❌ | ✅ | ❌ | ✅ | ✅ |
] |
❌ | ✅ | ❌ | ✅ | ❌ | ✅ |
()[{} |
❌ | ✅ | ✅ | ✅ | ❌ | ✅ |
*+? |
❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
/ |
✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
0DSWbdfnrstvw |
✅ | ⚠️ | ✅ | ⚠️ | ✅ | ⚠️ |
B |
✅ | ⚠️ | ✅ | ❌ | ✅ | ❌ |
$. |
⚠️ | ✅ | ✅ | ✅ | ✅ | ✅ |
| |
⚠️ | ✅ | ✅ | ✅ | ❌ | ✅ |
- |
✅ | ❌ | ✅⚠️ | ✅ | ❌⚠️ | ✅ |
^ |
⚠️ | ✅ | ✅⚠️ | ✅ | ✅⚠️ | ✅ |
\ |
❌⚠️ | ✅ | ❌⚠️ | ✅ | ❌⚠️ | ✅ |
Hinweis: Die Zeichen, die sowohl maskiert als auch unmaskiert in v
-Modus-Zeichengruppen auftreten können, sind genau diejenigen, die als "doppelte Punktuatoren" verboten sind. Siehe v
-Modus-Zeichengruppen für weitere Informationen.
Wann immer Sie ein Syntaxzeichen buchstäblich darstellen möchten, müssen Sie es mit einem Backslash (\
) escapen. Zum Beispiel, um ein buchstäbliches *
in einem Muster zu matchen, müssen Sie \*
im Muster schreiben. Die Verwendung von Syntaxzeichen als Literalzeichen führt entweder zu unerwarteten Ergebnissen oder zu Syntaxfehlern — zum Beispiel ist /*/
kein gültiger regulärer Ausdruck, weil der Quantifier nicht von einem Muster vorangegangen wird. Im Unicode-unempfindlichen Modus können ]
, {
und }
buchstäblich auftreten, wenn es nicht möglich ist, sie als das Ende einer Zeichenklasse oder Quantifier-Delimiter zu analysieren. Dies ist eine veraltete Syntax für Web-Kompatibilität und Sie sollten sich nicht darauf verlassen.
Literale reguläre Ausdrücke können nicht mit bestimmten nicht-Syntax-Literalzeichen spezifiziert werden. /
kann nicht als Literalzeichen in einem regulären Ausdrucksliteral auftreten, da /
als Trennzeichen des Literals selbst verwendet wird. Sie müssen es als \/
escapen, wenn Sie ein buchstäbliches /
matchen möchten. Zeilenabschlüsse können auch nicht als Literalzeichen in einem regulären Ausdrucksliteral auftreten, da ein Literal nicht über mehrere Zeilen spannt. Sie müssen einen Zeichen-Escape wie \n
verwenden. Diese Einschränkungen gibt es nicht, wenn Sie den RegExp()
-Konstruktor verwenden, obwohl Zeichenkettenliterale ihre eigenen Escaping-Regeln haben (zum Beispiel steht "\\"
tatsächlich für ein einzelnes Backslash-Zeichen, sodass new RegExp("\\*")
und /\*/
äquivalent sind).
Im Unicode-unempfindlichen Modus wird das Muster als eine Sequenz von UTF-16-Codeeinheiten interpretiert. Das bedeutet, dass Surrogatpaare tatsächlich zwei Literalzeichen darstellen. Dies führt zu unerwarteten Verhaltensweisen, wenn es mit anderen Funktionen kombiniert wird:
/^[😄]$/.test("😄"); // false, because the pattern is interpreted as /^[\ud83d\udc04]$/
/^😄+$/.test("😄😄"); // false, because the pattern is interpreted as /^\ud83d\udc04+$/
Im Unicode-empfindlichen Modus wird das Muster als eine Sequenz von Unicode-Codepunkten interpretiert, und Surrogatpaare werden nicht aufgeteilt. Deshalb sollten Sie immer die Verwendung des u
-Flags bevorzugen.
Beispiele
Verwendung von Literalzeichen
Das folgende Beispiel ist aus dem Artikel Zeichen-Escape kopiert. Die Zeichen a
und b
sind Literalzeichen im Muster, und \n
ist ein maskiertes Zeichen, weil es nicht buchstäblich in einem regulären Ausdrucksliteral vorkommen kann.
const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true
Spezifikationen
Specification |
---|
ECMAScript Language Specification # prod-PatternCharacter |
Browser-Kompatibilität
BCD tables only load in the browser