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

6

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow