Екранування символів: \n, \u{...}

Екранування символу представляє символ, який не може бути зручно представлений у своїй буквальній формі.

Синтаксис

\f, \n, \r, \t, \v
\cA, \cB, …, \cz
\0
\^, \$, \\, \., \*, \+, \?, \(, \), \[, \], \\{, \\}, \|, \/

\xHH
\uHHHH
\u{HHH}

[!NOTE]

, не є частиною цього синтаксису.

Параметри

HHH

Шістнадцяткове число, що представляє кодову точку Unicode, що відповідає символу. Форма \xHH повинна містити дві шістнадцяткові цифри; форма \uHHHH повинна містити чотири; форма \u{HHH} може містити від однієї до шести шістнадцяткових цифр.ʼ

Опис

В регулярних виразах працюють наступні екранування символів:

\f, \n, \r, \t, \v

Такі ж, як у рядкових літералах, за винятком \b, що представляє у регулярних виразах межу слова, якщо не знаходиться у класі символів.

\c, після чого стоїть літера від A до Z або від a до z

Представляє контрольний символ зі значенням, що дорівнює остачі від ділення значення символу літери на 32. Наприклад, \cJ представляє розрив рядка (\n), оскільки кодова точка J дорівнює 74, а остача від ділення 74 на 32 дорівнює 10, що є кодовою точкою розриву рядка. Оскільки велика літера та її мала форма мають різницю 32, \cJ та \cj еквівалентні. У цій формі можна представити контрольні символи від 1 до 26.

\0

Представляє символ U+0000 NUL. Після нього не може стояти цифра (що зробило б його історичним вісімковим екрануванням).

\^, \$, \\, \. \*, \+, \?, \(, \), \[, \], \\{, \\}, \|, \/

Представляє сам символ. Наприклад, \\ представляє зворотну скісну риску, а \( – ліву дужку. Ці символи в регулярних виразах є синтаксичними символами (наприклад, / є межею регулярного виразу), тому вони потребують екранування, якщо не знаходяться у класі символів.

\xHH

Представляє символ, що має дану шістнадцяткову кодову точку Unicode. Шістнадцяткове число повинно складатися рівно з двох цифр.

\uHHHH

Представляє символ, що має дану шістнадцяткову кодову точку Unicode. Шістнадцяткове число повинно складатися рівно з чотирьох цифр. Два такі екранування можна використовувати для представлення сурогатної пари у режимі з урахуванням Unicode. (У режимі без урахування Unicode вони завжди будуть двома окремими символами.)

\u{HHH}

(Лише в режимі з урахуванням Unicode) Представляє символ, що має дану шістнадцяткову кодову точку Unicode. Шістнадцяткове число може містити від 1 до 6 цифр.

У режимі без урахування Unicode, екранування символів, що не належить до перелічених вище, стає екрануванням ідентичності: воно представляє символ, що йде після зворотної скісної риски. Наприклад, \a представляє символ a. Ця поведінка обмежує можливість введення нових екранувань символів без порушення сумісності з попередніми версіями, тому вона заборонена у режимі з урахуванням Unicode.

У режимі без урахування Unicode ], { і } можуть зустрічатися буквально, якщо неможливо сприйняти їх за кінець класу символів або межу квантора. Це нерекомендований синтаксис, залишений заради сумісності у Вебі, і на нього не слід покладатися.

У режимі без урахування Unicode екранування символів у межах класів символів у формі \cX, де X – це число або _, кодуються так само, як і ті, що містять літери ASCII: \c0 – те саме, що й \cP, якщо взято остачу від ділення на 32. Крім того, якщо форма \cX зустрічається де завгодно, де X не є одним із розпізнаних символів, то зворотна скісна риска вважається буквальним символом. Ці форми синтаксису також нерекомендовані.

/[\c0]/.test("\x10"); // true
/[\c_]/.test("\x1f"); // true
/[\c*]/.test("\\"); // true
/\c/.test("\\c"); // true
/\c0/.test("\\c0"); // true (синтаксис \c0 підтримується лише у класах символів)

Приклади

Використання екранувань символів

Екранування символів корисні тоді, коли є потреба шукати збіг із символом, який не легко представити у його буквальній формі. Наприклад, не можна буквально вписати у літеральний регулярний вираз розрив рядка, тому потрібно використовувати екранування символу:

const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true

Специфікації

Якщо ви це бачите — значить, щось трапилося з цією сторінкою.

Сумісність із браузерами

Якщо ви це бачите — значить, щось трапилося з цією сторінкою.

Дивіться також