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

6

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow