Suche…
Bemerkungen
Nicht alles, was mit einem Backslash beginnt, ist eine Escape-Sequenz. Viele Zeichen sind für das Escape-Verhalten von Sequenzen einfach nicht hilfreich und führen einfach dazu, dass ein vorangegangener Backslash ignoriert wird.
"\H\e\l\l\o" === "Hello" // true
Andererseits verursachen einige Zeichen wie "u" und "x" einen Syntaxfehler, wenn sie nach einem Backslash nicht ordnungsgemäß verwendet werden. Folgendes ist kein gültiges Zeichenfolgenliteral, da es das Unicode-Escape-Sequenzpräfix \u
gefolgt von einem Zeichen enthält, das weder eine gültige hexadezimale Ziffer noch eine geschweifte Klammer ist:
"C:\Windows\System32\updatehandlers.dll" // SyntaxError
Ein umgekehrter Schrägstrich am Ende einer Zeile innerhalb einer Zeichenfolge führt keine Escape-Sequenz ein, sondern zeigt die Zeilenfortsetzung an, d. H
"contin\
uation" === "continuation" // true
Ähnlichkeit mit anderen Formaten
Während Escape-Sequenzen in JavaScript Ähnlichkeiten mit anderen Sprachen und Formaten wie C ++, Java, JSON usw. aufweisen, gibt es oft kritische Unterschiede in den Details. Stellen Sie im Zweifelsfall sicher, dass sich Ihr Code wie erwartet verhält, und prüfen Sie die Sprachspezifikation.
Eingabe von Sonderzeichen in Strings und regulären Ausdrücken
Die meisten druckbaren Zeichen können in String- oder reguläre Ausdrucksliterale enthalten sein, wie sie sind, z
var str = "ポケモン"; // a valid string
var regExp = /[Α-Ωα-ω]/; // matches any Greek letter without diacritics
Um willkürliche Zeichen, einschließlich nicht druckbarer Zeichen, zu einem String oder regulären Ausdruck hinzuzufügen, müssen Escape-Sequenzen verwendet werden . Escape-Sequenzen bestehen aus einem Backslash ("\") gefolgt von einem oder mehreren anderen Zeichen. Um eine Escape - Sequenz für einen bestimmten Charakter zu schreiben, eine Regel (aber nicht immer) muss seinen hexadezimalen weiß Zeichencode .
JavaScript bietet verschiedene Möglichkeiten zum Angeben von Escape-Sequenzen, wie in den Beispielen in diesem Thema beschrieben. Beispielsweise kennzeichnen die folgenden Escape-Sequenzen dasselbe Zeichen: den Zeilenvorschub (Unix-Zeilenvorschubzeichen) mit dem Zeichencode U + 000A.
-
\n
-
\x0a
-
\u000a
-
\u{a}
neu in ES6, nur in Zeichenfolgen -
\012
in String-Literalen im strikten Modus und in Template-Strings verboten -
\cj
nur in regulären Ausdrücken
Escape-Sequenztypen
Einzelzeichen-Escape-Sequenzen
Einige Escape-Sequenzen bestehen aus einem Backslash, gefolgt von einem einzelnen Zeichen.
Zum Beispiel in alert("Hello\nWorld");
Die Escape-Sequenz \n
wird verwendet, um im String-Parameter eine neue Zeile einzuführen, so dass die Wörter "Hello" und "World" in aufeinanderfolgenden Zeilen angezeigt werden.
Fluchtabfolge | Charakter | Unicode |
---|---|---|
\b (nur in Strings, nicht in regulären Ausdrücken) | Rücktaste | U + 0008 |
\t | horizontale Registerkarte | U + 0009 |
\n | Zeilenvorschub | U + 000A |
\v | vertikale Registerkarte | U + 000B |
\f | Formularvorschub | U + 000C |
\r | Wagenrücklauf | U + 000D |
Zusätzlich kann die Folge \0
, wenn keine Null zwischen 0 und 7 folgt, um das Nullzeichen (U + 0000) zu ersetzen.
Die Sequenzen \\
, \'
und \"
werden verwendet, um dem Zeichen zu entkommen, das auf den Backslash folgt. Obwohl ähnlich wie bei Escape-Sequenzen der führende Backslash einfach ignoriert wird (dh \?
For ?
), Werden sie explizit als Single behandelt Zeichen-Escape-Sequenzen innerhalb von Strings gemäß der Spezifikation.
Hexadezimale Escape-Sequenzen
Zeichen mit Codes zwischen 0 und 255 können mit einer Escape-Sequenz dargestellt werden, wobei nach \x
der zweistellige Hexadezimalzeichencode folgt. Zum Beispiel hat das \xa0
Leerzeichen den Code 160 oder A0 in der Basis 16 und kann daher als \xa0
.
var str = "ONE\xa0LINE"; // ONE and LINE with a non-breaking space between them
Für Hex-Ziffern über 9 werden die Buchstaben a
bis f
ohne Unterscheidung in Klein- oder Großbuchstaben verwendet.
var regExp1 = /[\x00-xff]/; // matches any character between U+0000 and U+00FF
var regExp2 = /[\x00-xFF]/; // same as above
4-stellige Unicode-Escape-Sequenzen
Zeichen mit Codes zwischen 0 und 65535 (2 16 - 1) können mit einer Escape-Sequenz dargestellt werden, wobei nach \u
der 4-stellige Hexadezimalzeichencode folgt.
Beispielsweise definiert der Unicode-Standard das Rechtspfeilzeichen ("→") mit der Nummer 8594 oder 2192 im Hexadezimalformat. Eine Escape-Sequenz dafür wäre also \u2192
.
Dies erzeugt die Zeichenfolge "A → B":
var str = "A \u2192 B";
Für Hex-Ziffern über 9 werden die Buchstaben a
bis f
ohne Unterscheidung in Klein- oder Großbuchstaben verwendet. Hexadezimale Codes, die kürzer als 4 Ziffern sind, müssen mit Nullen aufgefüllt werden: \u007A
für den Kleinbuchstaben "z".
Geschweifte Klammer Unicode-Escape-Sequenzen
ES6 erweitert die Unicode-Unterstützung auf den gesamten Codebereich von 0 bis 0x10FFFF. Um Zeichen mit einem Code größer als 2 16 - 1 zu umgehen, wurde eine neue Syntax für Escape-Sequenzen eingeführt:
\u{???}
Wenn der Code in geschweiften Klammern eine hexadezimale Darstellung des Codepunktwerts ist, z
alert("Look! \u{1f440}"); // Look! 👀
Im obigen Beispiel ist der Code 1f440
die hexadezimale Darstellung des Zeichencodes der Unicode Character Eyes .
Beachten Sie, dass der Code in geschweiften Klammern eine beliebige Anzahl von Hex-Ziffern enthalten kann, solange der Wert 0x10FFFF nicht überschreitet. Für Hex-Ziffern über 9 werden die Buchstaben a
bis f
ohne Unterscheidung in Klein- oder Großbuchstaben verwendet.
Unicode-Escape-Sequenzen mit geschweiften Klammern funktionieren nur in Strings, nicht in regulären Ausdrücken!
Octale Escape-Sequenzen
Oktal-Escape-Sequenzen werden ab ES5 nicht mehr empfohlen, sie werden jedoch weiterhin in regulären Ausdrücken und im nicht strikten Modus auch in Nicht-Vorlagen-Strings unterstützt. Eine oktale Escape-Sequenz besteht aus einer, zwei oder drei Oktalstellen mit einem Wert zwischen 0 und 377 8 = 255.
Beispielsweise hat der Großbuchstabe "E" den Zeichencode 69 oder 105 in der Basis 8. Daher kann er mit der Escape-Sequenz \105
:
/\105scape/.test("Fun with Escape Sequences"); // true
Im strikten Modus sind octale Escape-Sequenzen innerhalb von Strings nicht zulässig und erzeugen einen Syntaxfehler. Es sei darauf hingewiesen, dass \0
im Gegensatz zu \00
oder \000
keine oktale Escape-Sequenz ist und daher im strikten Modus innerhalb von Strings (sogar Template-Strings) zulässig ist.
Fluchtsequenzen steuern
Einige Escape-Sequenzen werden nur in Literalen regulärer Ausdrücke (nicht in Strings) erkannt. Damit können Zeichen mit den Codes zwischen 1 und 26 (U + 0001 – U + 001A) geschützt werden. Sie bestehen aus einem einzelnen Buchstaben A-Z (Fall macht keinen Unterschied) von voran \c
. Die alphabetische Position des Buchstabens nach \c
bestimmt den Zeichencode.
Zum Beispiel im regulären Ausdruck
`/\cG/`
Der Buchstabe "G" (der 7. Buchstabe im Alphabet) bezieht sich auf das Zeichen U + 0007 und somit
`/\cG`/.test(String.fromCharCode(7)); // true