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» и