Sök…


Anmärkningar

Inte allt som börjar med en backslash är en flykt sekvens. Många tecken är helt enkelt inte användbara för att undkomma sekvenser och kommer helt enkelt att ignorera ett föregående bakslag.

"\H\e\l\l\o" === "Hello" // true

Å andra sidan kommer vissa tecken som "u" och "x" att orsaka ett syntaxfel när de används felaktigt efter ett bakslag. Följande är inte en giltig strängbokstavlig eftersom den innehåller prefixet Unicode escape-sekvens \u följt av ett tecken som inte är en giltig hexadecimal siffra eller en krullad stag:

"C:\Windows\System32\updatehandlers.dll" // SyntaxError

Ett bakslag i slutet av en linje inuti en sträng introducerar inte en utrymningssekvens, men indikerar linjefortsättning, dvs.

"contin\
uation" === "continuation" // true

Likhet med andra format

Medan escape-sekvenser i JavaScript liknar andra språk och format, som C ++, Java, JSON, etc. kommer det ofta att vara kritiska skillnader i detaljerna. Om du är osäker, ska du testa att din kod fungerar som förväntat och överväga att kontrollera språkspecifikationen.

Ange specialtecken i strängar och vanliga uttryck

De flesta utskrivbara tecken kan inkluderas i strängar eller ordinarie uttryckslitteratur precis som de är, t.ex.

var str = "ポケモン"; // a valid string
var regExp = /[Α-Ωα-ω]/; // matches any Greek letter without diacritics

För att lägga till godtyckliga tecken i en sträng eller ett reguljärt uttryck, inklusive icke-utskrivbara, måste man använda escape-sekvenser . Escape-sekvenser består av ett backslash ("\") följt av en eller flera andra tecken. För att skriva en flygsekvens för en viss karaktär måste en (men inte alltid) känna till sin hexadecimala teckenkod .

JavaScript tillhandahåller ett antal olika sätt att specificera escape-sekvenser, som dokumenterats i exemplen i detta ämne. Till exempel, följande escape-sekvenser alla beteckna samma karaktär: linjematning (Unix radmatningstecken), med teckenkod U + 000A.

  • \n
  • \x0a
  • \u000a
  • \u{a} nytt i ES6, bara i strängar
  • \012 förbjudet i strängbokstäver i strikt läge och i mallsträngar
  • \cj endast i vanliga uttryck

Escape-sekvenstyper

Enfigurers flygsekvenser

Vissa flygsekvenser består av ett bakslag som följs av en enda karaktär.

Till exempel i alert("Hello\nWorld"); , flygsekvensen \n används för att introducera en ny linje i strängparametern, så att orden "Hej" och "Värld" visas i rad i följd.

Escape-sekvens Karaktär Unicode
\b (endast i strängar, inte i vanliga uttryck) backsteg U + 0008
\t horisontell flik U + 0009
\n radmatning U + 000A
\v vertikal flik U + 000B
\f bilda foder U + 000C
\r vagnretur U + 000D

Dessutom kan sekvensen \0 , när den inte följs av en siffra mellan 0 och 7, användas för att undgå nolltecknet (U + 0000).

Sekvenserna \\ , \' och \" används för att undgå tecknet som följer backslashen. Även om de liknar sekvenser som inte undviker, där det ledande backslashen helt enkelt ignoreras (dvs. \? För ? ), Behandlas de uttryckligen som enstaka teckenflukt-sekvenser inuti strängar enligt specifikationen.

Hexadecimala flykt-sekvenser

Tecken med koder mellan 0 och 255 kan representeras med en flygsekvens där \x följs av den tvåsiffriga hexadecimala teckenkoden. Till exempel har det icke-brytande utrymmetecknet kod 160 eller A0 i bas 16, och så kan det skrivas som \xa0 .

var str = "ONE\xa0LINE"; // ONE and LINE with a non-breaking space between them

För hexsiffror över 9 används bokstäverna a till f , med små eller stora bokstäver utan åtskillnad.

var regExp1 = /[\x00-xff]/; // matches any character between U+0000 and U+00FF
var regExp2 = /[\x00-xFF]/; // same as above

4-siffriga Unicode-flygsekvenser

Tecken med koder mellan 0 och 65535 (2 16 - 1) kan representeras med en flygsekvens där \u följs av den fyrsiffriga hexadecimala teckenkoden.

Till exempel definierar Unicode-standarden högerpiltecken ("→") med siffran 8594 eller 2192 i hexadecimalt format. Så en flyktningssekvens för det skulle vara \u2192 .

Detta producerar strängen "A → B":

var str = "A \u2192 B";

För hexsiffror över 9 används bokstäverna a till f , med små eller stora bokstäver utan åtskillnad. Hexadecimala koder som är kortare än fyra siffror måste vara vänstra vadderade med nollor: \u007A för små bokstaven "z".

Lockig konsol Unicode-flygsekvenser

6

ES6 utökar Unicode-stöd till hela kodintervallet från 0 till 0x10FFFF. För att undkomma tecken med kod större än 2 16 - 1 infördes en ny syntax för flykt-sekvenser:

\u{???}

Där koden i lockiga hängslen är hexadecimal representation av kodpunktsvärdet, t.ex.

alert("Look! \u{1f440}"); // Look! 👀

I exemplet ovan är koden 1f440 den hexadecimala representationen av teckenkoden för Unicode Character Eyes .

Observera att koden i lockiga hängslen kan innehålla valfritt antal hexsiffror, så länge värdet inte överstiger 0x10FFFF. För hexsiffror över 9 används bokstäverna a till f , med små eller stora bokstäver utan åtskillnad.

Unicode-flygsekvenser med lockiga hängslen fungerar bara inuti strängar, inte i vanliga uttryck!

Oktala flygsekvenser

Oktala flyktningssekvenser avskrivs från och med ES5, men de stöds fortfarande i reguljära uttryck och i icke-strikt läge också i icke-mallsträngar. En oktal utrymningssekvens består av en, två eller tre oktala siffror, med värdet mellan 0 och 377 8 = 255.

Exempelvis har versalerna "E" teckenkod 69, eller 105 i bas 8. Så det kan representeras med flygsekvensen \105 :

/\105scape/.test("Fun with Escape Sequences"); // true

I strikt läge är octala flyktningssekvenser inte tillåtna inuti strängar och ger ett syntaxfel. Det är värt att notera att \0 , till skillnad från \00 eller \000 , inte betraktas som en octal flyktningssekvens, och därför fortfarande är tillåten i strängar (även mallsträngar) i strikt läge.

Kontrollera flygsekvenser

Vissa flygsekvenser känns igen endast i vanliga uttryckslitteraler (inte i strängar). Dessa kan användas för att undgå tecken med koder mellan 1 och 26 (U + 0001 – U + 001A). De består av en bokstav A – Z (fallet gör ingen skillnad) föregående av \c . Den alfabetiska positionen för bokstaven efter \c avgör teckenkoden.

Till exempel i det vanliga uttrycket

`/\cG/`

Bokstaven "G" (den sjunde bokstaven i alfabetet) hänvisar till tecknet U + 0007, och därmed

`/\cG`/.test(String.fromCharCode(7)); // true


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow