Поиск…


замечания

Не все, что начинается с обратной косой черты, - это escape-последовательность. Многие символы просто не помогают избежать последовательностей и просто вызывают игнорирование предыдущей обратной косой черты.

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

С другой стороны, некоторые символы, такие как «u» и «x», вызывают синтаксическую ошибку при неправильном использовании после обратного слэша. Ниже приведен не допустимый строковый литерал, поскольку он содержит префикс escape последовательности Unicode \u за которым следует символ, который не является допустимой шестнадцатеричной цифрой или фигурной скобкой:

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

Обратная косая черта в конце строки внутри строки не вводит escape-последовательность, но указывает на продолжение строки, т. Е.

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

Сходство с другими форматами

Хотя escape-последовательности в JavaScript имеют сходство с другими языками и форматами, такими как C ++, Java, JSON и т. Д., В деталях часто бывают критические различия. Если вы сомневаетесь, убедитесь, что ваш код ведет себя так, как ожидалось, и рассмотрите возможность проверки спецификации языка.

Ввод специальных символов в строках и регулярных выражениях

Большинство печатных символов могут быть включены в строковые или литералы регулярных выражений так же, как они есть, например

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

Чтобы добавить произвольные символы в строку или регулярное выражение, включая непечатаемые, нужно использовать escape-последовательности . Экранирующие последовательности состоят из обратной косой черты («\»), за которой следуют один или несколько других символов. Чтобы написать escape-последовательность для определенного символа, обычно обычно (но не всегда) должен знать свой шестнадцатеричный код символа .

JavaScript предоставляет несколько различных способов указания управляющих последовательностей, как описано в примерах в этом разделе. Например, следующие escape-последовательности все обозначают один и тот же символ: строка (символ новой строки Unix) с кодом U + 000A.

  • \n
  • \x0a
  • \u000a
  • \u{a} new в ES6, только в строках
  • \012 запрещено в строковых литералах в строгом режиме и в строках шаблонов
  • \cj только в регулярных выражениях

Типы последовательности эвакуации

Управляющие последовательности с одним символом

Некоторые escape-последовательности состоят из обратной косой черты, сопровождаемой одним символом.

Например, в alert("Hello\nWorld"); , escape-последовательность \n используется для ввода новой строки в строковом параметре, так что слова «Hello» и «World» отображаются в последовательных строках.

Эквивалентная последовательность символ Unicode
\b (только в строках, а не в регулярных выражениях) возврат на одну позицию U + 0008
\t горизонтальная вкладка U + 0009
\n line feed U + 000A
\v вертикальная вкладка U + 000B
\f форма подачи U + 000C
\r возврат каретки U + 000D

Кроме того, для исключения нулевого символа (U + 0000) может использоваться последовательность \0 , если не следовать цифрой от 0 до 7.

Последовательности \\ , \' и \" используются для выхода из символа, следующего за обратным слэшем. В то время как аналогичные последовательности без escape-последовательности, где ведущая обратная косая черта просто игнорируются (то есть \? For ? ), Они явно рассматриваются как одиночные в последовательности символов в соответствии со спецификацией.

Шестнадцатеричные escape-последовательности

Символы с кодами от 0 до 255 могут быть представлены с помощью escape-последовательности, где за \x следует двухзначный шестнадцатеричный код символа. Например, символ неразрывного пробела имеет код 160 или A0 в базе 16, поэтому его можно записать как \xa0 .

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

Для шестнадцатеричных цифр выше 9 буквы a f используются в нижнем и верхнем регистре без различия.

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

4-разрядные escape-последовательности Unicode

Символы с кодами между 0 и 65535 (2 16 - 1) могут быть представлены с помощью escape-последовательности, где за \u следует четырехзначный шестнадцатеричный код символа.

Например, стандарт Unicode определяет символ правой стрелки («→») с номером 8594 или 2192 в шестнадцатеричном формате. Таким образом, escape-последовательность для него была бы \u2192 .

Это создает строку «A → B»:

var str = "A \u2192 B";

Для шестнадцатеричных цифр выше 9 буквы a f используются в нижнем и верхнем регистре без различия. Шестнадцатеричные коды длиной менее 4 цифр должны быть заполнены нулями: \u007A для маленькой буквы «z».

Коричневые скобки Unicode escape-последовательности

6

ES6 расширяет поддержку Unicode до полного диапазона кода от 0 до 0x10FFFF. Чтобы избежать символов с кодом более 2 16 - 1, был введен новый синтаксис для управляющих последовательностей:

\u{???}

Если код в фигурных скобках представляет собой шестнадцатеричное представление значения кодовой точки, например

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

В приведенном выше примере код 1f440 представляет собой шестнадцатеричное представление символьного кода символов Unicode Character Eyes .

Обратите внимание, что код в фигурных скобках может содержать любое количество шестнадцатеричных цифр, поскольку значение не превышает 0x10FFFF. Для шестнадцатеричных цифр выше 9 буквы a f используются в нижнем и верхнем регистре без различия.

Unicode escape-последовательности с фигурными фигурными скобками работают только внутри строк, а не внутри регулярных выражений!

Октальные escape-последовательности

Октальные escape-последовательности устаревают с ES5, но они по-прежнему поддерживаются внутри регулярных выражений и в нестрогом режиме также внутри строк без шаблонов. Октальная escape-последовательность состоит из одной, двух или трех восьмеричных цифр со значением от 0 до 377 8 = 255.

Например, заглавная буква «E» имеет код 69 символов или 105 в базе 8. Таким образом, ее можно представить с помощью escape-последовательности \105 :

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

В строгом режиме восьмеричные escape-последовательности не допускаются внутри строк и вызывают синтаксическую ошибку. Стоит отметить, что \0 , в отличие от \00 или \000 , не считается восьмеричной escape-последовательностью и, тем самым, разрешен внутри строк (даже строк шаблонов) в строгом режиме.

Управляющие управляющие последовательности

Некоторые escape-последовательности распознаются только внутри литералов регулярного выражения (не в строках). Они могут использоваться для удаления символов с кодами между 1 и 26 (U + 0001-U + 001A). Они состоят из одной буквы A-Z (случай не имеет значения), которому предшествует \c . Алфавитное положение буквы после \c определяет код символа.

Например, в регулярном выражении

`/\cG/`

Буква «G» (7-я буква в алфавите) относится к символу U + 0007, и, таким образом,

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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow