Szukaj…
Uwagi
Nie wszystko, co zaczyna się od odwrotnego ukośnika, jest sekwencją ucieczki. Wiele znaków jest po prostu nieprzydatnych do ucieczki sekwencji i po prostu spowoduje zignorowanie poprzedzającego ukośnika odwrotnego.
"\H\e\l\l\o" === "Hello" // true
Z drugiej strony niektóre znaki, takie jak „u” i „x”, spowodują błąd składniowy, jeśli zostaną użyte nieprawidłowo po odwrotnym ukośniku. Poniższa nie jest prawidłowym ciągiem znaków, ponieważ zawiera sekwencję escape Unicode przedrostek \u
, po którym następuje znak, który nie jest prawidłowy szesnastkowy ani nawias klamrowy:
"C:\Windows\System32\updatehandlers.dll" // SyntaxError
Odwrotny ukośnik na końcu linii wewnątrz łańcucha nie wprowadza sekwencji ucieczki, ale wskazuje na kontynuację linii, tj
"contin\
uation" === "continuation" // true
Podobieństwo do innych formatów
Podczas gdy sekwencje specjalne w JavaScript mają podobieństwo do innych języków i formatów, takich jak C ++, Java, JSON itp., Często występują krytyczne różnice w szczegółach. W razie wątpliwości sprawdź, czy kod zachowuje się zgodnie z oczekiwaniami, i rozważ sprawdzenie specyfikacji języka.
Wprowadzanie znaków specjalnych w ciągach znaków i wyrażeniach regularnych
Większość drukowalnych znaków może być zawarta w literałach ciągów znaków lub wyrażeń regularnych takimi, jakimi są, np
var str = "ポケモン"; // a valid string
var regExp = /[Α-Ωα-ω]/; // matches any Greek letter without diacritics
Aby dodać dowolne znaki do łańcucha lub wyrażenia regularnego, w tym niedrukowalne, należy zastosować sekwencje specjalne . Sekwencje specjalne składają się z ukośnika odwrotnego („\”), po którym następuje jeden lub więcej innych znaków. Aby napisać sekwencję zmiany znaczenia dla określonego znaku, osoba zwykle (ale nie zawsze) musi znać swój szesnastkowy kod znaków .
JavaScript zapewnia wiele różnych sposobów określania sekwencji specjalnych, jak udokumentowano w przykładach w tym temacie. Na przykład następujące sekwencje specjalne oznaczają ten sam znak: znak wiersza (znak nowej linii w systemie Unix), o kodzie znakowym U + 000A.
-
\n
-
\x0a
-
\u000a
-
\u{a}
nowy w ES6, tylko w ciągach -
\012
zabronione w literałach ciągów w trybie ścisłym i ciągach szablonów -
\cj
tylko w wyrażeniach regularnych
Typy sekwencji ucieczki
Sekwencje specjalne jednoznakowe
Niektóre sekwencje specjalne składają się z odwrotnego ukośnika, po którym następuje pojedynczy znak.
Na przykład w stanie alert("Hello\nWorld");
, sekwencja zmiany znaczenia \n
służy do wprowadzenia nowego wiersza w parametrze ciągu, dzięki czemu słowa „Hello” i „World” są wyświetlane w kolejnych wierszach.
Sekwencja ewakuacyjna | Postać | Unicode |
---|---|---|
\b (tylko w ciągach, nie w wyrażeniach regularnych) | backspace | U + 0008 |
\t | zakładka pozioma | U + 0009 |
\n | linia wiersza | U + 000A |
\v | zakładka pionowa | U + 000B |
\f | form feed | U + 000C |
\r | powrót karetki | U + 000D |
Dodatkowo, sekwencja \0
, po której nie następuje cyfra od 0 do 7, może być użyta do zmiany znaku null (U + 0000).
Sekwencje \\
, \'
i \"
są używane do zmiany znaczenia znaku następującego po odwrotnym ukośniku. Chociaż są podobne do sekwencji nie-ucieczkowych, w których wiodący odwrotny ukośnik jest po prostu ignorowany (tzn. \?
Za ?
), Są jawnie traktowane jako pojedyncze sekwencje specjalne znaków w łańcuchach, zgodnie ze specyfikacją.
Szesnastkowe sekwencje specjalne
Znaki o kodach od 0 do 255 mogą być reprezentowane przez sekwencję zmiany znaczenia, gdzie po \x
następuje dwucyfrowy szesnastkowy kod znaku. Na przykład niełamliwy znak spacji ma kod 160 lub A0 w podstawie 16, więc można go zapisać jako \xa0
.
var str = "ONE\xa0LINE"; // ONE and LINE with a non-breaking space between them
W przypadku cyfr szesnastkowych powyżej 9 stosuje się litery od a
do f
, pisane małymi lub dużymi literami bez rozróżnienia.
var regExp1 = /[\x00-xff]/; // matches any character between U+0000 and U+00FF
var regExp2 = /[\x00-xFF]/; // same as above
4-cyfrowe sekwencje specjalne Unicode
Znaki z zakresu od 0 do 65535 (2, 16 - 1), może być reprezentowana w sekwencji sterującej, gdzie \u
następuje 4-cyfrowy kod znaków szesnastkowym.
Na przykład standard Unicode definiuje znak prawej strzałki („→”) o numerze 8594 lub 2192 w formacie szesnastkowym. Tak więc sekwencją ucieczki byłoby \u2192
.
W ten sposób powstaje ciąg „A → B”:
var str = "A \u2192 B";
W przypadku cyfr szesnastkowych powyżej 9 używane są litery od a
do f
, pisane małymi lub dużymi literami bez rozróżnienia. Kody szesnastkowe krótsze niż 4 cyfry muszą być \u007A
zerami: \u007A
dla małej litery „z”.
Sekwencje specjalne Unicode nawiasu klamrowego
ES6 rozszerza obsługę Unicode do pełnego zakresu kodów od 0 do 0x10FFFF. W celu zmiany znaczenia znaków o kodzie większym niż 2 16-1 wprowadzono nową składnię sekwencji specjalnych:
\u{???}
Gdzie kod w nawiasach klamrowych jest szesnastkową reprezentacją wartości punktu kodowego, np
alert("Look! \u{1f440}"); // Look! 👀
W powyższym przykładzie kod 1f440
jest szesnastkową reprezentacją kodu znakowego oczu znaków Unicode.
Zauważ, że kod w nawiasach klamrowych może zawierać dowolną liczbę cyfr szesnastkowych, o ile wartość nie przekracza 0x10FFFF. W przypadku cyfr szesnastkowych powyżej 9 stosuje się litery od a
do f
, pisane małymi lub dużymi literami bez rozróżnienia.
Sekwencje specjalne Unicode z nawiasami klamrowymi działają tylko wewnątrz ciągów, a nie w wyrażeniach regularnych!
Liczby ósemkowe
Ośmiokrotne sekwencje specjalne są przestarzałe od wersji ES5, ale nadal są obsługiwane w wyrażeniach regularnych, aw trybie innym niż ścisły również w ciągach innych niż szablony. Oktalowa sekwencja ucieczki składa się z jednej, dwóch lub trzech cyfr ósemkowych, o wartości od 0 do 377 8 = 255.
Na przykład wielka litera „E” ma kod 69 lub 105 w podstawie 8. Aby można ją było przedstawić za pomocą sekwencji ucieczki \105
:
/\105scape/.test("Fun with Escape Sequences"); // true
W trybie ścisłym ósemkowe sekwencje specjalne nie są dozwolone w ciągach znaków i powodują błąd składniowy. Warto zauważyć, że \0
, w przeciwieństwie do \00
lub \000
, nie jest uważane za ósemkową sekwencję ucieczki, a zatem jest nadal dozwolone w łańcuchach (nawet łańcuchach szablonów) w trybie ścisłym.
Kontroluj sekwencje ucieczki
Niektóre sekwencje specjalne są rozpoznawane tylko w literałach wyrażeń regularnych (nie w ciągach znaków). Można ich użyć do zmiany znaczenia znaków o kodach od 1 do 26 (U + 0001 – U + 001A). Składają się z jednej litery A – Z (wielkość liter nie ma znaczenia) poprzedzonej znakiem \c
. Położenie alfabetyczne litery po \c
określa kod znaku.
Na przykład w wyrażeniu regularnym
`/\cG/`
Litera „G” (siódma litera alfabetu) odnosi się do znaku U + 0007, a zatem
`/\cG`/.test(String.fromCharCode(7)); // true