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.

 

Static Semantics: Early Errors — Статическая семантика: ранние ошибки

Примечание

В этот раздел внесены поправки в B.1.4.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.

 

Static Semantics: CapturingGroupNumber 

Примечание

В этот раздел внесены поправки в B.1.4.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.

 

Static Semantics: IsCharacterClass

Примечание

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

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

1. Вернуть false.

ClassEscape :: CharacterClassEscape

1. Вернуть true.

 

Static Semantics: CharacterValue

Примечание 1

В этот раздел внесены поправки в B.1.4.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. Верните значение кодовой точки в соответствии с таблицей 59.

 

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>

Таблица 59: Значения точек кода 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.

 

Static Semantics: SourceText

UnicodePropertyNameCharacters :: UnicodePropertyNameCharacter UnicodePropertyNameCharacters opt

UnicodePropertyValueCharacters :: UnicodePropertyValueCharacter UnicodePropertyValueCharacters opt

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

 

Static Semantics: CapturingGroupName

RegExpIdentifierName [U] ::

RegExpIdentifierStart [?U]

RegExpIdentifierName [?U] RegExpIdentifierPart [?U]

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

 

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

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

Поделись записью