Zeichencodes: \n, \u{...}
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 Zeichencode repräsentiert ein Zeichen, das möglicherweise nicht bequem in seiner literalen Form dargestellt werden kann.
Syntax
\f, \n, \r, \t, \v
\cA, \cB, …, \cz
\0
\^, \$, \\, \., \*, \+, \?, \(, \), \[, \], \{, \}, \|, \/
\xHH
\uHHHH
\u{H…H}
Hinweis:
, ist nicht Teil der Syntax.
Parameter
H…H-
Eine hexadezimale Zahl, die den Unicode-Codepunkt des Zeichens darstellt. Die
\xHH-Form muss zwei hexadezimale Ziffern haben; die\uHHHH-Form muss vier haben; die\u{H…H}-Form kann 1 bis 6 hexadezimale Ziffern haben.
Beschreibung
Die folgenden Zeichencodes werden in regulären Ausdrücken erkannt:
\f,\n,\r,\t,\v-
Genauso wie in Zeichenfolgenliteralen, außer
\b, das in Regexen eine Wortgrenze darstellt, es sei denn, es befindet sich in einer Zeichenklasse. \cgefolgt von einem Buchstaben vonAbisZoderabisz-
Repräsentiert das Steuerzeichen mit einem Wert, der gleich dem Buchstabenwert modulo 32 ist. Beispielsweise repräsentiert
\cJeinen Zeilenumbruch (\n), da der Codepunkt vonJ74 ist und 74 modulo 32 gleich 10 ist, was dem Codepunkt des Zeilenumbruchs entspricht. Da sich ein Großbuchstabe und seine Kleinschreibung um 32 unterscheiden, sind\cJund\cjäquivalent. Steuerzeichen von 1 bis 26 können auf diese Weise dargestellt werden. \0-
Repräsentiert das U+0000 NUL-Zeichen. Darf nicht von einer Ziffer gefolgt werden (was es zu einer veralteten oktalen Escape Sequenz macht).
\^,\$,\\,\.\*,\+,\?,\(,\),\[,\],\{,\},\|,\/-
Repräsentiert das Zeichen selbst. Beispielsweise repräsentiert
\\einen Rückwärtsstrich, und\(stellt eine linke runde Klammer dar. Dies sind Syntaxzeichen in Regexen (/ist der Begrenzer eines Regex-Literals), daher erfordern sie eine Escape-Sequenz, es sei denn, sie befinden sich in einer Zeichenklasse. \xHH-
Repräsentiert das Zeichen mit dem angegebenen hexadezimalen Unicode-Codepunkt. Die hexadezimale Zahl muss genau zwei Ziffern lang sein.
\uHHHH-
Repräsentiert das Zeichen mit dem angegebenen hexadezimalen Unicode-Codepunkt. Die hexadezimale Zahl muss genau vier Ziffern lang sein. Zwei solche Escape-Sequenzen können verwendet werden, um ein Surrogatpaar im Unicode-bewussten Modus darzustellen. (Im Unicode-unbewussten Modus sind sie immer zwei separate Zeichen.)
\u{H…H}-
(Nur im Unicode-bewussten Modus) Repräsentiert das Zeichen mit dem angegebenen hexadezimalen Unicode-Codepunkt. Die hexadezimale Zahl kann zwischen 1 und 6 Ziffern lang sein.
Im Unicode-unbewussten Modus werden Escape-Sequenzen, die nicht zu den oben genannten gehören, zu Identitäts-Escape-Sequenzen: Sie repräsentieren das Zeichen, das dem Rückwärtsstrich folgt. Zum Beispiel, \a repräsentiert das Zeichen a. Dieses Verhalten schränkt die Möglichkeit ein, neue Escape-Sequenzen einzuführen, ohne Kompatibilitätsprobleme zu verursachen, und ist daher im Unicode-bewussten Modus verboten.
Im Unicode-unbewussten Modus können ], { und } literally erscheinen, wenn es nicht möglich ist, sie als Ende einer Zeichenklasse oder Quantifizierungsbegrenzung zu parsen. Dies ist eine veraltete Syntax für Web-Kompatibilität, und Sie sollten sich nicht darauf verlassen.
Im Unicode-unbewussten Modus werden Escape-Sequenzen innerhalb von Zeichenklassen der Form \cX, wobei X eine Zahl oder _ ist, auf die gleiche Weise dekodiert wie die mit ASCII-Buchstaben: \c0 ist dasselbe wie \cP, wenn man modulo 32 annimmt. Darüber hinaus wird, wenn die Form \cX irgendwo auftritt, wo X nicht eines der erkannten Zeichen ist, der Rückwärtsstrich als literales Zeichen behandelt. Diese Syntaxen sind ebenfalls veraltet.
/[\c0]/.test("\x10"); // true
/[\c_]/.test("\x1f"); // true
/[\c*]/.test("\\"); // true
/\c/.test("\\c"); // true
/\c0/.test("\\c0"); // true (the \c0 syntax is only supported in character classes)
Beispiele
>Verwendung von Zeichencodes
Zeichencodes sind nützlich, wenn Sie ein Zeichen ansprechen möchten, das nicht leicht in seiner literalen Form dargestellt werden kann. Beispielsweise können Sie in einem Regex-Literal keinen Zeilenumbruch direkt verwenden, deshalb müssen Sie einen Zeichencode verwenden:
const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2026 Language Specification> # prod-CharacterEscape> |