Spec-Zone.ru › JavaScript

Литеральный символ: a, b

Базовая линия Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

Литеральный символ точно указывает на сам себя, что нужно найти во входном тексте.

Синтаксис

c

Параметры

c
Одиночный символ, который не является одним из ниже описанных синтаксических символов.

Описание

В регулярных выражениях большинство символов могут использоваться как литералы. Обычно они являются самыми основными строительными блоками шаблонов. Например, вот шаблон из примера Удаление HTML-тегов:

const pattern = /<.+?>/g;

В этом примере ., + и ? называются синтаксическими символами. Они имеют специальное значение в регулярных выражениях. Остальные символы в шаблоне (< и >) являются литеральными символами. Они соответствуют самим себе во входном тексте: угловые скобки.

Следующие символы являются синтаксическими в регулярных выражениях, и они не могут использоваться как литералы:

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

Внутри классов символов больше символов могут использоваться как литералы. Для получения дополнительной информации см. страницу Класс символов. Например, \. и [.] оба соответствуют литеральному символу .. Однако в классах символов в режиме v есть другой набор символов, зарезервированных как синтаксические. Чтобы быть максимально полным, ниже приведена таблица символов ASCII и того, могут ли они использоваться как экранированные или неэкранированные в различных контекстах, где "✅" означает, что символ соответствует самому себе, "❌" означает синтаксическую ошибку, а "⚠️" означает, что символ допустим, но означает нечто иное, чем сам себя.

Символы Вне классов символов в режиме u или v В классах символов в режиме u В классах символов в режиме v
Неэкранированный Экранированный Неэкранированный Экранированный Неэкранированный Экранированный
123456789 "'
ACEFGHIJKLMN
OPQRTUVXYZ_
aceghijklmop
quxyz
✅ ❌ ✅ ❌ ✅ ❌
!#%&,:;<=>@`~ ✅ ❌ ✅ ❌ ✅ ✅
] ❌ ✅ ❌ ✅ ❌ ✅
()[{} ❌ ✅ ✅ ✅ ❌ ✅
*+? ❌ ✅ ✅ ✅ ✅ ✅
/ ✅ ✅ ✅ ✅ ❌ ✅
0DSWbdfnrstvw ✅ ⚠️ ✅ ⚠️ ✅ ⚠️
B ✅ ⚠️ ✅ ❌ ✅ ❌
$. ⚠️ ✅ ✅ ✅ ✅ ✅
| ⚠️ ✅ ✅ ✅ ❌ ✅
- ✅ ❌ ✅⚠️ ✅ ❌⚠️ ✅
^ ⚠️ ✅ ✅⚠️ ✅ ✅⚠️ ✅
\ ❌⚠️ ✅ ❌⚠️ ✅ ❌⚠️ ✅

Примечание: Символы, которые могут быть как экранированы, так и не экранированы в классах символов в режиме v, являются именно теми, которые запрещены как "двойные знаки препинания". См. классы символов в режиме v для получения дополнительной информации.

Всякий раз, когда вы хотите найти синтаксический символ как литерал, вам нужно экранировать его обратной косой чертой (\). Например, чтобы найти литеральный символ * в шаблоне, вам нужно написать \* в шаблоне. Использование синтаксических символов как литералов приводит либо к неожиданным результатам, либо к синтаксическим ошибкам — например, /*/ не является допустимым регулярным выражением, потому что квантификатор не предшествует шаблону. В режиме, не учитывающем Unicode, ], { и } могут появляться как литералы, если их невозможно разобрать как конец класса символов или разделители квантификатора. Это устаревший синтаксис для совместимости с веб-браузерами, и на него не следует полагаться.

Литералы регулярных выражений не могут быть указаны с определенными несинтаксическими литеральными символами. / не может быть литеральным символом в литерале регулярного выражения, потому что / используется в качестве разделителя самого литерала. Вам нужно экранировать его как \/, если вы хотите найти литеральный символ /. Символы новой строки также не могут быть литеральными символами в литерале регулярного выражения, потому что литерал не может охватывать несколько строк. Вместо этого вам нужно использовать экранирование символов, такое как \n. Нет таких ограничений при использовании конструктора RegExp(), хотя строковые литералы имеют свои собственные правила экранирования (например, "\\" на самом деле обозначает один символ обратной косой черты, поэтому new RegExp("\\*") и /\*/ эквивалентны).

В режиме, не учитывающем Unicode, шаблон интерпретируется как последовательность кодовых единиц UTF-16. Это означает, что суррогатные пары фактически представляют два литеральных символа. Это вызывает неожиданное поведение при сочетании с другими функциями:

/^[😄]$/.test("😄"); // false, because the pattern is interpreted as /^[\ud83d\udc04]$/
/^😄+$/.test("😄😄"); // false, because the pattern is interpreted as /^\ud83d\udc04+$/

В режиме, учитывающем Unicode, шаблон интерпретируется как последовательность кодовых точек Unicode, и суррогатные пары не разделяются. Поэтому вам всегда следует предпочитать использовать флаг u.

Примеры

Использование литеральных символов

Следующий пример скопирован из раздела Экранирование символов. Символы a и b являются литеральными символами в шаблоне, а \n — экранированным символом, поскольку он не может появиться как литерал в регулярном выражении.

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

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

Спецификация
Спецификация языка ECMAScript® 2027
# prod-PatternCharacter

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS Bun Deno Node.js
literal_character
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

См. также

  • Руководство по классам символов
  • Регулярные выражения
  • Экранирование символов: \n, \u{...}

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Literal_character

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API