Конструктор 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» и