ECMAScript | Шаблоны (Patterns) | Регулярные выражения (Regular Expression)

ECMAScript | Шаблоны (Patterns) | Регулярные выражения (Regular Expression)

Конструктор RegExp применяет следующую грамматику к входному шаблону строки String. Ошибка возникает, если грамматика не может интерпретировать строку String как расширение Pattern.

 

Синтаксис (Syntax)

Pattern [U, N] ::

Disjunction [?U, ?N]

Disjunction [U, N] ::

Alternative [?U, ?N]

Alternative [?U, ?N] | Disjunction [?U, ?N]

Alternative [U, N] ::

[empty]

Alternative [?U, ?N] Term [?U, ?N]

Term [U, N] ::

Assertion [?U, ?N]

Atom [?U, ?N]

Atom [?U, ?N] Quantifier

Assertion [U, N] ::

^

$

\ b

\ B

( ? = Disjunction [?U, ?N] )

( ? ! Disjunction [?U, ?N] )

( ? <= Disjunction [?U, ?N] )

( ? <! Disjunction [?U, ?N] )

Quantifier ::

QuantifierPrefix

QuantifierPrefix ?

QuantifierPrefix ::

*

+

?

{ DecimalDigits [~Sep] }

{ DecimalDigits [~Sep] , }

 

{ DecimalDigits [~Sep] , DecimalDigits [~Sep] }

Atom [U, N] ::

PatternCharacter

.

\ AtomEscape [?U, ?N]

CharacterClass [?U]

( GroupSpecifier [?U] Disjunction [?U, ?N] )

( ? : Disjunction [?U, ?N] )

SyntaxCharacter :: one of

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

PatternCharacter ::

SourceCharacter но не SyntaxCharacter

AtomEscape [U, N] ::

DecimalEscape

CharacterClassEscape [?U]

CharacterEscape [?U]

[+N] k GroupName [?U]

CharacterEscape [U] ::

ControlEscape

c ControlLetter

0 [lookahead ∉ DecimalDigit]

HexEscapeSequence

RegExpUnicodeEscapeSequence [?U]

IdentityEscape [?U]

ControlEscape :: one of

f n r t v

ControlLetter :: one of

a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

GroupSpecifier [U] ::

[empty]

? GroupName [?U]

GroupName [U] ::

< RegExpIdentifierName [?U] >

RegExpIdentifierName [U] ::

RegExpIdentifierStart [?U]

RegExpIdentifierName [?U] RegExpIdentifierPart [?U]

RegExpIdentifierStart [U] ::

UnicodeIDStart

$

_

\ RegExpUnicodeEscapeSequence [+U]

[~U] UnicodeLeadSurrogate UnicodeTrailSurrogate

RegExpIdentifierPart [U] ::

UnicodeIDContinue

$

\ RegExpUnicodeEscapeSequence [+U]

[~U] UnicodeLeadSurrogate UnicodeTrailSurrogate

<ZWNJ>

<ZWJ>

RegExpUnicodeEscapeSequence [U] ::

[+U] u HexLeadSurrogate \u HexTrailSurrogate

[+U] u HexLeadSurrogate

[+U] u HexTrailSurrogate

[+U] u HexNonSurrogate

[~U] u Hex4Digits

[+U] u{ CodePoint }

UnicodeLeadSurrogate ::

любая кодовая точка Unicode в диапазоне от 0xD800 до 0xDBFF

UnicodeTrailSurrogate ::

любая кодовая точка Unicode в диапазоне от 0xDC00 до 0xDFFF

 

Каждый \u HexTrailSurrogate, для которого выбор ассоциированного u HexLeadSurrogate является неоднозначным, должен быть связан с ближайшим возможным u HexLeadSurrogate, который в противном случае не имел бы соответствующего \u HexTrailSurrogate.

 

HexLeadSurrogate ::

Hex4Digits , но только если MV из Hex4Digits находится в диапазоне от 0xD800 до 0xDBFF

HexTrailSurrogate ::

Hex4Digits , но только если MV из Hex4Digits находится в диапазоне от 0xDC00 до 0xDFFF

HexNonSurrogate ::

Hex4Digits , но только если MV из Hex4Digits не находится в диапазоне от 0xD800 до 0xDFFF

IdentityEscape [U] ::

[+U] SyntaxCharacter

[+U] /

[~U] SourceCharacter но не UnicodeIDContinue

DecimalEscape ::

NonZeroDigit DecimalDigits [~Sep] opt [lookahead ∉ DecimalDigit]

CharacterClassEscape [U] ::

d

D

s

S

w

W

[+U] p{ UnicodePropertyValueExpression }

[+U] P{ UnicodePropertyValueExpression }

UnicodePropertyValueExpression ::

UnicodePropertyName = UnicodePropertyValue

LoneUnicodePropertyNameOrValue

UnicodePropertyName ::

UnicodePropertyNameCharacters

UnicodePropertyNameCharacters ::

UnicodePropertyNameCharacter UnicodePropertyNameCharacters opt

UnicodePropertyValue ::

UnicodePropertyValueCharacters

LoneUnicodePropertyNameOrValue ::

UnicodePropertyValueCharacters

UnicodePropertyValueCharacters ::

UnicodePropertyValueCharacter UnicodePropertyValueCharacters opt

UnicodePropertyValueCharacter ::

UnicodePropertyNameCharacter

DecimalDigit

UnicodePropertyNameCharacter ::

ControlLetter

_

CharacterClass [U] ::

[ [lookahead ≠ ^ClassRanges [?U] ]

[ ^ ClassRanges [?U] ]

ClassRanges [U] ::

[empty]

NonemptyClassRanges [?U]

NonemptyClassRanges [U] ::

ClassAtom [?U]

ClassAtom [?U] NonemptyClassRangesNoDash [?U]

ClassAtom [?U]  ClassAtom [?U] ClassRanges [?U]

NonemptyClassRangesNoDash [U] ::

ClassAtom [?U]

ClassAtomNoDash [?U] NonemptyClassRangesNoDash [?U]

ClassAtomNoDash [?U]  ClassAtom [?U] ClassRanges [?U]

ClassAtom [U] ::

ClassAtomNoDash [?U]

ClassAtomNoDash [U] ::

SourceCharacter но не одно из \ или ] или

\ ClassEscape [?U]

ClassEscape [U] ::

b

[+U]

CharacterClassEscape [?U]

CharacterEscape [?U]

Примечание

Некоторым продуктам в этом разделе даются альтернативные определения в разделе B.1.4.

 

 

22.2.1.1 Статическая семантика: Early Errors

Примечание

В этот раздел внесены поправки в B.1.2.1.

Pattern :: Disjunction

  • Это Синтаксическая Ошибка, если NcapturingParens ≥ 232 — 1.
  • Это Синтаксическая Ошибка, если Pattern содержит несколько GroupSpecifiers, чьи вложенные RegExpIdentifierNames имеют одинаковое CapturingGroupName.

QuantifierPrefix :: { DecimalDigits , DecimalDigits }

  • Это Синтаксическая Ошибка, если MV первых DecimalDigits больше MV вторых DecimalDigits.

AtomEscape :: k GroupName

AtomEscape :: DecimalEscape

NonemptyClassRanges :: ClassAtom ClassAtom ClassRanges

NonemptyClassRangesNoDash :: ClassAtomNoDash ClassAtom ClassRanges

RegExpIdentifierStart [U] :: \ RegExpUnicodeEscapeSequence [+U]

  • Это синтаксическая ошибка, если CharacterValue из RegExpUnicodeEscapeSequence не является значением кодовой точки «$», «_» или некоторой кодовой точкой, совпадающей с производством лексической грамматики UnicodeIDStart.

RegExpIdentifierStart [U] :: UnicodeLeadSurrogate UnicodeTrailSurrogate

RegExpIdentifierPart [U] :: \ RegExpUnicodeEscapeSequence [+U]

  • Это синтаксическая ошибка, если CharacterValue из RegExpUnicodeEscapeSequence не является значением кодовой точки «$», «_», <ZWNJ>, <ZWJ> или какой-либо кодовой точкой, соответствующей лексической грамматике UnicodeIDContinue.

RegExpIdentifierPart [U] :: UnicodeLeadSurrogate UnicodeTrailSurrogate

UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue

UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue

  • Это синтаксическая ошибка, если Список кодовых точек Unicode, который является SourceText из LoneUnicodePropertyNameOrValue, не идентичен Списку кодовых точек Unicode, который является общей категорией Unicode или псевдонимом общей категории, перечисленным в столбце «Значение свойства и псевдонимы» таблицы 62, ни двоичное свойство или псевдоним двоичного свойства, перечисленные в столбце «Имя свойства и псевдонимы» Таблицы 61.

 

22.2.1.2 Статическая семантика: CapturingGroupNumber

Операция CapturingGroupNumber (Номер группы захвата), управляемая синтаксисом, не принимает аргументов.

Примечание

В этот раздел внесены поправки в B.1.2.1.

DecimalEscape :: NonZeroDigit

1. Вернуть MV NonZeroDigit.

DecimalEscape :: NonZeroDigit DecimalDigits

1. Пусть n будет количеством кодовых точек в DecimalDigits.
2. Возврат (MV NonZeroDigit × 10n плюс MV DecimalDigits).

Определения «MV NonZeroDigit» и «MV DecimalDigits» приведены в 12.8.3.

 

22.2.1.3 Статическая семантика: IsCharacterClass

Операция IsCharacterClass (Является ли Классом Символа), управляемая синтаксисом, не принимает аргументов.

Примечание

В этот раздел внесены поправки в B.1.2.2.

ClassAtom ::
ClassAtomNoDash :: SourceCharacter но не одно из \ или ] или
ClassEscape :: b
ClassEscape ::
ClassEscape :: CharacterEscape

1. Вернуть false.

ClassEscape :: CharacterClassEscape

1. Вернуть true.

 

22.2.1.4 Статическая семантика: CharacterValue

Операция CharacterValue (Значение Символа), управляемая синтаксисом, не принимает аргументов.

Примечание 1

В этот раздел внесены поправки в B.1.2.3.

ClassAtom ::

1. Верните значение кодовой точки U+002D (ДЕФИС-МИНУС).

ClassAtomNoDash :: SourceCharacter но не одно из \ или ] или

1. Пусть ch будет кодовой точкой, совпадающей с SourceCharacter.
2. Вернуть значение кодовой точки ch.

ClassEscape :: b

1. Вернуть значение кодовой точки U+0008 (BACKSPACE).

ClassEscape ::

1. Вернуть значение кодовой точки U+002D (ДЕФИС-МИНУС).

CharacterEscape :: ControlEscape

1. Верните значение кодовой точки в соответствии с Таблицей 67.

 

ControlEscape Code Point Value (Значение кодовой точки) Code Point (Кодовая точка) Unicode Name (Юникод имя) Symbol (Символ)
t 9 U+0009 CHARACTER TABULATION <HT>
n 10 U+000A LINE FEED (LF) <LF>
v 11 U+000B LINE TABULATION <VT>
f 12 U+000C FORM FEED (FF) <FF>
r 13 U+000D CARRIAGE RETURN (CR) <CR>

Таблица 67: Значения точек кода ControlEscape

CharacterEscape :: c ControlLetter

1. Пусть ch будет кодовой точкой, совпадающей с ControlLetter.
2. Пусть i будет значением кодовой точки ch.
3. Верните остаток от деления i на 32.

CharacterEscape :: 0 [lookahead ∉ DecimalDigit]

1. Вернуть значение кодовой точки U+0000 (NULL).
Примечание 2

\0 представляет собой символ <NUL> и не может сопровождаться десятичной цифрой.

CharacterEscape :: HexEscapeSequence

1. Верните MV из шестнадцатеричной последовательности побега HexEscapeSequence.

RegExpUnicodeEscapeSequence :: u HexLeadSurrogate \u HexTrailSurrogate

1. Пусть lead будет CharacterValue из HexLeadSurrogate.
2. Пусть trail будет CharacterValue из HexTrailSurrogate.
3. Пусть cp будет UTF16SurrogatePairToCodePoint(lead, trail).
4. Вернуть значение кодовой точки cp.

RegExpUnicodeEscapeSequence :: u Hex4Digits

1. Верните MV из Hex4Digits.

RegExpUnicodeEscapeSequence :: u{ CodePoint }

1. Верните MV из CodePoint.

HexLeadSurrogate :: Hex4Digits
HexTrailSurrogate :: Hex4Digits
HexNonSurrogate :: Hex4Digits

1. Верните MV из HexDigits.

CharacterEscape :: IdentityEscape

1. Пусть ch будет кодовой точкой, совпадающей с IdentityEscape.
2. Вернуть значение кодовой точки ch.

 

 

22.2.1.5 Статическая семантика: SourceText

Операция SourceText (Исходный текст), управляемая синтаксисом, не принимает аргументов. Она определяется кусочно по следующим производствам:

UnicodePropertyNameCharacters :: UnicodePropertyNameCharacter UnicodePropertyNameCharacters opt

UnicodePropertyValueCharacters :: UnicodePropertyValueCharacter UnicodePropertyValueCharacters opt

1. Вернуть Список, в порядке исходного текста, кодовых точек Unicode в исходном тексте, совпадающем с этим производством.

 

22.2.1.6 Статическая семантика: CapturingGroupName

Операция CapturingGroupName (Имя группы захвата), управляемая синтаксисом, не принимает аргументов. Она определяется кусочно по следующим производствам:

RegExpIdentifierName ::

RegExpIdentifierStart

RegExpIdentifierName RegExpIdentifierPart

1. Пусть idTextUnescaped будет RegExpIdentifierCodePoints из RegExpIdentifierName.
2. Вернуть ! CodePointsToString(idTextUnescaped).

 

—версия до мая 2021 года—

RegExpIdentifierName [U] ::

RegExpIdentifierStart [?U]

RegExpIdentifierName [?U] RegExpIdentifierPart [?U]

1. Пусть idText будет исходным текстом, совпадающим с RegExpIdentifierName.
2. Пусть idTextUnescaped будет результатом замены любых вхождений \ RegExpUnicodeEscapeSequence в idText кодовой точкой, представленной RegExpUnicodeEscapeSequence.
3. Вернуть ! CodePointsToString(idTextUnescaped).

 

22.2.1.7 Статическая семантика: RegExpIdentifierCodePoints

—раздел добавлен в октябре 2021 года—

Операция RegExpIdentifierCodePoints (Кодовые Точки идентификатора Регулярного Выражения), управляемая синтаксисом, не принимает аргументов. Она определяется кусочно по следующим продукциям:

RegExpIdentifierName :: RegExpIdentifierStart

1. Пусть cp будет RegExpIdentifierCodePoint из RegExpIdentifierStart.
2. Верните « cp ».

RegExpIdentifierName :: RegExpIdentifierName RegExpIdentifierPart

1. Пусть cps будет RegExpIdentifierCodePoints производного RegExpIdentifierName.
2. Пусть cp будет RegExpIdentifierCodePoint из RegExpIdentifierPart.
3. Вернуть конкатенацию списков cps и « cp ».

 

22.2.1.8 Статическая семантика: RegExpIdentifierCodePoint

—раздел добавлен в октябре 2021 года—

Операция RegExpIdentifierCodePoint (Кодовая Точка идентификатора Регулярного Выражения), управляемая синтаксисом, не принимает аргументов. Она определяется кусочно по следующим продукциям:

RegExpIdentifierStart :: IdentifierStartChar

1. Верните кодовую точку, совпадающую с IdentifierStartChar.

RegExpIdentifierPart :: IdentifierPartChar

1. Верните кодовую точку, совпадающую с IdentifierPartChar.

RegExpIdentifierStart :: \ RegExpUnicodeEscapeSequence
RegExpIdentifierPart :: \ RegExpUnicodeEscapeSequence

1. Верните кодовую точку, числовое значение которой является CharacterValue из RegExpUnicodeEscapeSequence.

RegExpIdentifierStart :: UnicodeLeadSurrogate UnicodeTrailSurrogate
RegExpIdentifierPart :: UnicodeLeadSurrogate UnicodeTrailSurrogate

1. Пусть lead будет единицей кода (code unit), числовое значение которой совпадает с кодовой точкой, совпадающей с UnicodeLeadSurrogate.
2. Пусть trail будет единицей кода (code unit), числовое значение которой совпадает с кодовой точкой, совпадающей с UnicodeTrailSurrogate.
3. Верните UTF16SurrogatePairToCodePoint(lead, trail).

 

Информационные ссылки

Стандарт ECMAScript — Раздел «Patterns» — https://tc39.es/ecma262/#sec-patterns