Конструктор 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 ::
*
+
?
{ DecimalDigits [~Sep] }
{ DecimalDigits [~Sep] , }
{ DecimalDigits [~Sep] , DecimalDigits [~Sep] }
Atom [U, N] ::
.
\ AtomEscape [?U, ?N]
CharacterClass [?U]
( GroupSpecifier [?U] Disjunction [?U, ?N] )
( ? : Disjunction [?U, ?N] )
SyntaxCharacter :: one of
^ $ \ . * + ? ( ) [ ] { } |
SourceCharacter но не SyntaxCharacter
AtomEscape [U, N] ::
CharacterClassEscape [?U]
CharacterEscape [?U]
[+N] k GroupName [?U]
CharacterEscape [U] ::
0 [lookahead ∉ DecimalDigit]
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] ::
RegExpIdentifierName [?U] RegExpIdentifierPart [?U]
RegExpIdentifierStart [U] ::
$
_
\ RegExpUnicodeEscapeSequence [+U]
[~U] UnicodeLeadSurrogate UnicodeTrailSurrogate
RegExpIdentifierPart [U] ::
$
\ 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 }
любая кодовая точка Unicode в диапазоне от 0xD800 до 0xDBFF
любая кодовая точка Unicode в диапазоне от 0xDC00 до 0xDFFF
Каждый \u HexTrailSurrogate, для которого выбор ассоциированного u HexLeadSurrogate является неоднозначным, должен быть связан с ближайшим возможным u HexLeadSurrogate, который в противном случае не имел бы соответствующего \u HexTrailSurrogate.
Hex4Digits , но только если MV из Hex4Digits находится в диапазоне от 0xD800 до 0xDBFF
Hex4Digits , но только если MV из Hex4Digits находится в диапазоне от 0xDC00 до 0xDFFF
Hex4Digits , но только если MV из Hex4Digits не находится в диапазоне от 0xD800 до 0xDFFF
IdentityEscape [U] ::
[+U] SyntaxCharacter
[+U] /
[~U] SourceCharacter но не UnicodeIDContinue
NonZeroDigit DecimalDigits [~Sep] opt [lookahead ∉ DecimalDigit]
CharacterClassEscape [U] ::
d
D
s
S
w
W
[+U] p{ UnicodePropertyValueExpression }
[+U] P{ UnicodePropertyValueExpression }
UnicodePropertyValueExpression ::
UnicodePropertyName = UnicodePropertyValue
LoneUnicodePropertyNameOrValue
UnicodePropertyNameCharacters ::
UnicodePropertyNameCharacter UnicodePropertyNameCharacters opt
UnicodePropertyValueCharacters
LoneUnicodePropertyNameOrValue ::
UnicodePropertyValueCharacters
UnicodePropertyValueCharacters ::
UnicodePropertyValueCharacter UnicodePropertyValueCharacters opt
UnicodePropertyValueCharacter ::
UnicodePropertyNameCharacter ::
_
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 SS: Early Errors
- 22.2.1.2 SS: CapturingGroupNumber
- 22.2.1.3 SS: IsCharacterClass
- 22.2.1.4 SS: CharacterValue
- 22.2.1.5 SS: SourceText
- 22.2.1.6 SS: CapturingGroupName
22.2.1.1 Статическая семантика: Early Errors
В этот раздел внесены поправки в B.1.2.1.
- Это Синтаксическая Ошибка, если NcapturingParens ≥ 232 — 1.
- Это Синтаксическая Ошибка, если Pattern содержит несколько GroupSpecifiers, чьи вложенные RegExpIdentifierNames имеют одинаковое CapturingGroupName.
QuantifierPrefix :: { DecimalDigits , DecimalDigits }
- Это Синтаксическая Ошибка, если MV первых DecimalDigits больше MV вторых DecimalDigits.
AtomEscape :: k GroupName
- Это Синтаксическая Ошибка, если включающий шаблон Pattern не содержит GroupSpecifier с вложенным RegExpIdentifierName, CapturingGroupName которого совпадает с CapturingGroupName RegExpIdentifierName данного продукта GroupName.
- Это Синтаксическая Ошибка, если CapturingGroupNumber для DecimalEscape больше, чем NcapturingParens (22.2.2.1).
NonemptyClassRanges :: ClassAtom — ClassAtom ClassRanges
- Это Синтаксическая Ошибка, если IsCharacterClass первого ClassAtom является true или IsCharacterClass второго ClassAtom является true.
- Это Синтаксическая Ошибка, если IsCharacterClass первого ClassAtom является false, а IsCharacterClass второго ClassAtom является false, а CharacterValue первого ClassAtom больше, чем CharacterValue второго ClassAtom.
NonemptyClassRangesNoDash :: ClassAtomNoDash — ClassAtom ClassRanges
- Это синтаксическая ошибка, если IsCharacterClass для ClassAtomNoDash истинно (является true) или IsCharacterClass для ClassAtom истинно (является true).
- Это синтаксическая ошибка, если IsCharacterClass для ClassAtomNoDash имеет значение false, а IsCharacterClass для ClassAtom — false, а значение CharacterValue для ClassAtomNoDash больше, чем CharacterValue для ClassAtom.
RegExpIdentifierStart [U] :: \ RegExpUnicodeEscapeSequence [+U]
- Это синтаксическая ошибка, если CharacterValue из RegExpUnicodeEscapeSequence не является значением кодовой точки «$», «_» или некоторой кодовой точкой, совпадающей с производством лексической грамматики UnicodeIDStart.
RegExpIdentifierStart [U] :: UnicodeLeadSurrogate UnicodeTrailSurrogate
- Это синтаксическая ошибка, если результат выполнения UTF16SurrogatePairToCodePoint для двух кодовых точек, соответствующих UnicodeLeadSurrogate и UnicodeTrailSurrogate, соответственно, не совпадает с созданием лексической грамматики UnicodeIDStart.
RegExpIdentifierPart [U] :: \ RegExpUnicodeEscapeSequence [+U]
- Это синтаксическая ошибка, если CharacterValue из RegExpUnicodeEscapeSequence не является значением кодовой точки «$», «_», <ZWNJ>, <ZWJ> или какой-либо кодовой точкой, соответствующей лексической грамматике UnicodeIDContinue.
RegExpIdentifierPart [U] :: UnicodeLeadSurrogate UnicodeTrailSurrogate
- Это синтаксическая ошибка, если результат выполнения UTF16SurrogatePairToCodePoint для двух кодовых точек, соответствующих UnicodeLeadSurrogate и UnicodeTrailSurrogate, соответственно, не соответствует лексической грамматике UnicodeIDContinue.
UnicodePropertyValueExpression :: UnicodePropertyName = UnicodePropertyValue
- Это синтаксическая ошибка, если Список кодовых точек Unicode, который является SourceText из UnicodePropertyName, не идентичен Списку кодовых точек Unicode, который является именем свойства Unicode или псевдонимом свойства, перечисленным в столбце «Имя свойства и псевдонимы» таблицы 60.
- Это синтаксическая ошибка, если Список кодовых точек Unicode, который является SourceText из UnicodePropertyValue, не идентичен Списку кодовых точек Unicode, который является значением или псевдонимом значения для свойства или псевдонима свойства Unicode, заданным SourceText для UnicodePropertyName, указанного в «Значение свойства и псевдонимы» соответствующих таблиц Таблица 62 или Таблица 63.
UnicodePropertyValueExpression :: LoneUnicodePropertyNameOrValue
- Это синтаксическая ошибка, если Список кодовых точек Unicode, который является SourceText из LoneUnicodePropertyNameOrValue, не идентичен Списку кодовых точек Unicode, который является общей категорией Unicode или псевдонимом общей категории, перечисленным в столбце «Значение свойства и псевдонимы» таблицы 62, ни двоичное свойство или псевдоним двоичного свойства, перечисленные в столбце «Имя свойства и псевдонимы» Таблицы 61.
22.2.1.2 Статическая семантика: CapturingGroupNumber
Операция CapturingGroupNumber (Номер группы захвата), управляемая синтаксисом, не принимает аргументов.
В этот раздел внесены поправки в B.1.2.1.
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 (Значение Символа), управляемая синтаксисом, не принимает аргументов.
В этот раздел внесены поправки в 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).
\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 RegExpIdentifierPart
1. Пусть idTextUnescaped будет RegExpIdentifierCodePoints из RegExpIdentifierName. 2. Вернуть ! CodePointsToString(idTextUnescaped).
—версия до мая 2021 года—
RegExpIdentifierName [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