Spec-Zone.ru › JavaScript

Регулярные выражения

Регулярное выражение (сокращенно regex) позволяет разработчикам сопоставлять строки с шаблоном, извлекать информацию о подсовпадениях или просто проверять, соответствует ли строка этому шаблону. Регулярные выражения используются во многих языках программирования, а синтаксис JavaScript вдохновлен Perl.

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

Описание

Регулярные выражения — важная концепция в теории формальных языков. Это способ описания потенциально бесконечного множества строковых последовательностей символов (называемого языком). Регулярное выражение, по своей сути, требует следующих элементов:

  • Набор символов, которые могут использоваться в языке, называемый алфавитом.
  • Конкатенация: ab означает "символ a, за которым следует символ b".
  • Объединение: a|b означает "либо a, либо b".
  • Звезда Клини: a* означает "ноль или более символов a".

При условии конечного алфавита (например, 26 букв английского алфавита или весь набор символов Unicode) все регулярные языки могут быть сгенерированы с помощью вышеперечисленных элементов. Конечно, многие шаблоны очень утомительны для выражения таким образом (например, "10 цифр" или "символ, который не является пробелом"), поэтому регулярные выражения JavaScript включают множество сокращений, представленных ниже.

Примечание: Регулярные выражения JavaScript на самом деле не являются регулярными из-за существования обратных ссылок (регулярные выражения должны иметь конечные состояния). Однако они по-прежнему являются очень полезной функцией.

Создание регулярных выражений

Регулярное выражение обычно создается как литерал путем заключения шаблона в прямые косые черты (/):

const regex1 = /ab+c/g;

Регулярные выражения также можно создавать с помощью конструктора RegExp():

const regex2 = new RegExp("ab+c", "g");

Они не имеют различий во время выполнения, хотя могут иметь последствия для производительности, статической анализируемости и удобства использования при экранировании символов. Для получения дополнительной информации см. RegExp.

Флаги регулярных выражений

Флаги — это специальные параметры, которые могут изменить способ интерпретации регулярного выражения или его взаимодействие с входным текстом. Каждый флаг соответствует одному свойству доступа в объекте RegExp.

Флаг Описание Соответствующее свойство
d Генерировать индексы для совпадений подстрок. hasIndices
g Глобальный поиск. global
i Поиск без учета регистра. ignoreCase
m Заставляет ^ и $ соответствовать началу и концу каждой строки, а не всей строки. multiline
s Позволяет . соответствовать символам новой строки. dotAll
u "Unicode"; обрабатывать шаблон как последовательность кодовых точек Unicode. unicode
v Улучшение режима u с дополнительными функциями Unicode. unicodeSets
y Выполнять "липкий" поиск, который начинается с текущей позиции в целевой строке. sticky

Флаги i, m и s могут быть включены или отключены для конкретных частей регулярного выражения с помощью синтаксиса модификатора.

В разделах ниже перечислены все доступные синтаксисы регулярных выражений, сгруппированные по их синтаксической природе.

Утверждения

Утверждения — это конструкции, которые проверяют, удовлетворяет ли строка определенному условию в указанной позиции, но не потребляют символы. Утверждения не могут быть квантифицированы.

Утверждение границы буфера: \A, \z, \Z
Утверждает, что текущая позиция в строке находится строго в начале или конце всей строки (\Z также допускает конечную новую строку), независимо от наличия флага m.
Утверждение границы ввода: ^, $
Утверждает, что текущая позиция является началом или концом ввода, или началом или концом строки, если установлен флаг m.
Утверждение предварительного просмотра: (?=...), (?!...)
Утверждает, что за текущей позицией следует или не следует определенный шаблон.
Утверждение обратного просмотра: (?<=...), (?<!...)
Утверждает, что перед текущей позицией находится или не находится определенный шаблон.
Утверждение границы слова: \b, \B
Утверждает, что текущая позиция является границей слова.

Атомы

Атомы — это наиболее базовые единицы регулярного выражения. Каждый атом потребляет один или несколько символов в строке и либо приводит к сбою сопоставления, либо позволяет шаблону продолжить сопоставление со следующим атомом.

Обратная ссылка: \1, \2
Сопоставляет ранее сопоставленную подшаблонную группу, захваченную группой захвата.
Группа захвата: (...)
Сопоставляет подшаблон и запоминает информацию о совпадении.
Класс символов: [...], [^...]
Сопоставляет любой символ из набора символов или не из набора символов. Когда включен флаг v, его также можно использовать для сопоставления строк конечной длины.
Экранирование класса символов: \d, \D, \w, \W, \s, \S
Сопоставляет любой символ из предопределенного набора символов или не из предопределенного набора символов.
Экранирование символа: \n, \u{...}
Сопоставляет символ, который может быть неудобно представлен в его литеральной форме.
Литеральный символ: a, b
Сопоставляет конкретный символ.
Модификатор: (?ims-ims:...)
Переопределяет настройки флагов в определенной части регулярного выражения.
Именованная обратная ссылка: \k<name>
Сопоставляет ранее сопоставленную подшаблонную группу, захваченную именованной группой захвата.
Именованная группа захвата: (?<name>...)
Сопоставляет подшаблон и запоминает информацию о совпадении. Группу можно позже идентифицировать по пользовательскому имени вместо ее индекса в шаблоне.
Незахватывающая группа: (?:...)
Сопоставляет подшаблон, не запоминая информацию о совпадении.
Экранирование класса символов Unicode: \p{...}, \P{...}
Сопоставляет набор символов, указанный свойством Unicode. Когда включен флаг v, его также можно использовать для сопоставления строк конечной длины.
Подстановочный знак: .
Сопоставляет любой символ, кроме терминаторов строки, если только не установлен флаг s.

Другие возможности

Эти элементы не определяют сами по себе какой-либо шаблон, но используются для составления шаблонов.

Дизъюнкция: |
Сопоставляет любую из альтернатив, разделенных символом |.
Квантификатор: *, +, ?, {n}, {n,}, {n,m}
Сопоставляет атом определенное количество раз.

Экранированные последовательности

Экранированные последовательности в регулярных выражениях относятся к любому виду синтаксиса, образованному \, за которым следуют один или несколько символов. Они могут выполнять очень разные цели в зависимости от того, что следует за \. Ниже приведен список всех допустимых "экранированных последовательностей":

Экранированная последовательность За кем следует Значение
\A Нет Утверждение границы буфера
\B Нет Утверждение не-границы слова
\D Нет Экранирование класса символов, представляющее непробельные символы
\P {, свойство и/или значение Unicode, затем } Экранирование класса символов Unicode, представляющее символы без указанного свойства Unicode
\S Нет Экранирование класса символов, представляющее непробельные символы
\W Нет Экранирование класса символов, представляющее не-словарные символы
\Z Нет Утверждение границы буфера
\b Нет Утверждение границы слова; внутри классов символов обозначает U+0008 (BACKSPACE)
\c Буква от A до Z или от a до z Экранирование символа, представляющее управляющий символ со значением, равным значению буквы по модулю 32
\d Нет Экранирование класса символов, представляющее символы цифр (от 0 до 9)
\f Нет Экранирование символа, представляющее U+000C (FORM FEED)
\k <, идентификатор, затем > Именованная обратная ссылка
\n Нет Экранирование символа, представляющее U+000A (LINE FEED)
\p {, свойство и/или значение Unicode, затем } Экранирование класса символов Unicode, представляющее символы с указанным свойством Unicode
\q {, строка, затем } Допустимо только внутри классов символов в режиме v; представляет строку, которая должна быть сопоставлена буквально
\r Нет Экранирование символа, представляющее U+000D (CARRIAGE RETURN)
\s Нет Экранирование класса символов, представляющее пробельные символы
\t Нет Экранирование символа, представляющее U+0009 (CHARACTER TABULATION)
\u 4 шестнадцатеричные цифры; или {, от 1 до 6 шестнадцатеричных цифр, затем } Экранирование символа, представляющее символ с указанной кодовой точкой
\v Нет Экранирование символа, представляющее U+000B (LINE TABULATION)
\w Нет Экранирование класса символов, представляющее словарные символы (от A до Z, от a до z, от 0 до 9, _)
\x 2 шестнадцатеричные цифры Экранирование символа, представляющее символ с указанным значением
\z Нет Утверждение границы буфера
\0 Нет Экранирование символа, представляющее U+0000 (NULL)

\, за которым следует 0 и другая цифра, становится устаревшей восьмеричной экранированной последовательностью, которая запрещена в режиме с учетом Unicode. \, за которым следует любая другая последовательность цифр, становится обратной ссылкой.

Кроме того, \ может сопровождаться некоторыми не буквенно-цифровыми символами, в этом случае экранированная последовательность всегда является экранированием символа, представляющим сам экранированный символ:

  • \$, \(, \), \*, \+, \., \/, \?, \[, \\, \], \^, \\{, \|, \\}: допустимы везде
  • \-: допустимо только внутри классов символов
  • \!, \#, \%, \&, \,, \:, \;, \<, \=, \>, \@, \`, \~: допустимо только внутри классов символов в режиме v

Другие ASCII-символы, а именно пробел, ", ', _ и любая буквенная строка, не упомянутая выше, не являются допустимыми экранированными последовательностями. В режиме без учета Unicode экранированные последовательности, которые не являются одной из вышеперечисленных, становятся тождественными экранированиями: они представляют символ, следующий за обратной косой чертой. Например, \a представляет символ a. Такое поведение ограничивает возможность введения новых экранированных последовательностей без проблем с обратной совместимостью, и поэтому запрещено в режиме с учетом Unicode.

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

Спецификация
Спецификация языка ECMAScript® 2027
# prod-DecimalEscape
Границы буфера регулярных выражений для ECMAScript
# sec-patterns
Спецификация языка ECMAScript® 2027
# prod-Atom
Спецификация языка ECMAScript® 2027
# prod-CharacterClass
Спецификация языка ECMAScript® 2027
# prod-CharacterClassEscape
Спецификация языка ECMAScript® 2027
# prod-CharacterEscape
Спецификация языка ECMAScript® 2027
# prod-Disjunction
Спецификация языка ECMAScript® 2027
# prod-Assertion
Спецификация языка ECMAScript® 2027
# prod-PatternCharacter
Спецификация языка ECMAScript® 2027
# prod-RegularExpressionModifiers
Спецификация языка ECMAScript® 2027
# prod-AtomEscape
Спецификация языка ECMAScript® 2027
# prod-Quantifier

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

Desktop Mobile Server
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
backreference
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
buffer_boundary_assertion
No
No
preview
No
preview
No
No
No
No
No
No
No
No
No
No
capturing_group
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
character_class
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
character_class_escape
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
character_escape
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
disjunction
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
input_boundary_assertion
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
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
lookahead_assertion
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
lookbehind_assertion
62
79
78
49
16.4
62
79
46
16.4
8.0
62
16.4
1.0.0
1.0
8.10.0
modifier
125
125
132
111
26
125
132
83
26
27.0
125
26
1.2.3
1.44
23.0.0
named_backreference
64
79
78
51
11.1
64
79
47
11.3
9.0
64
11.3
1.0.0
1.0
10.0.0
named_capturing_group
64
79
78
51
11.1
64
79
47
11.3
9.0
64
11.3
1.0.0
1.0
10.0.0
non_capturing_group
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
quantifier
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
unicode_character_class_escape
64
79
78
51
11.1
64
79
47
11.3
9.0
64
11.3
1.0.0
1.0
10.0.0
wildcard
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0
word_boundary_assertion
1
12
1
5
1
18
4
10.1
1
1.0
4.4
1
1.0.0
1.0
0.10.0

См. также

  • Руководство по регулярным выражениям
  • RegExp

© 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

Spec-Zone.ru

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