ECMAScript | Обозначение (Notation) | Регулярные выражения (Regular Expression)

ECMAScript | Обозначение (Notation) | Регулярные выражения (Regular Expression)

В описаниях ниже используются следующие псевдонимы (aliases):

 

Input

Input — это Список, элементы которого являются символами String, которым соответствует шаблон регулярного выражения. Каждый символ является либо «единицей кода» (code unit), либо «точкой кода» (code point), в зависимости от типа задействованного шаблона. Обозначение Input[n] означает n-ый символ Input, где n может находиться в диапазоне от 0 (включительно) до InputLength (исключая).

 

InputLength

InputLength — это количество символов в поле Input.

 

NcapturingParens

NcapturingParens — это общее количество скобок с левым захватом (т. е. общее количество узлов синтаксического анализа из Atom :: ( GroupSpecifier Disjunction ) ) в паттерне (шаблоне).

Захватывающая слева круглая скобка — это любой ( символ паттерна (шаблона), которому соответствует производству ( терминал из Atom :: ( GroupSpecifier Disjunction ).

 

DotAll

DotAll является true (истинно), если внутренний слот [[OriginalFlags]] объекта RegExp содержит «s«, в противном случае — false (ложь).

 

IgnoreCase

IgnoreCase является true (истинно), если внутренний слот [[OriginalFlags]] объекта RegExp содержит «i», в противном случае — false (ложь).

 

Multiline

Multiline (Многострочность) true (истинна), если внутренний слот [[OriginalFlags]] объекта RegExp содержит «m«, в противном случае — false (ложь).

 

Unicode

Unicode имеет значение true (истинно), если внутренний слот [[OriginalFlags]] объекта RegExp содержит «u«, в противном случае — false.

 

WordCharacters

WordCharacters — это математический набор, который представляет собой объединение всех шестидесяти трех символов в «ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_» (буквы, числа и U+005F (LOW LINE — НИЖНЯЯ ЛИНИЯ) в блоке Unicode Basic Latin), и все символы c, для которых c отсутствует в этом наборе, но есть Canonicalize(c).

WordCharacters не может содержать более шестидесяти трех символов, если Unicode и IgnoreCase не имеют значения true.

Псевдоним Зачем нужен? Значение по умолчанию
s Учитывает все точки false
i Игнорирует регистр символов false
m Учитывает многострочность false
u Учитывает символы Unicode false

 

Кроме того, в нижеследующих описаниях используются следующие внутренние структуры данных:

 

CharSet

CharSet (Набор Символов) — это математический набор символов. Когда флаг Unicode является true, «все символы» означает набор символов, содержащий все значения «кодовой точки» (code point); в противном случае «все символы» означает набор символов, содержащий все значения «кодовых единиц» (code unit).

 

State

State (Состояние) — это упорядоченная пара (endIndex, captures), где:

Состояния используются для представления состояний частичного совпадения в алгоритмах сопоставления регулярных выражений.

endIndex равен единице плюс индекс последнего входного символа, совпадающего на данный момент с паттерном (шаблоном), а captures содержит результаты захвата круглых скобок.

n-ый элемент из захвата captures — это либо Список символов, который представляет значение, полученное n-ым набором захватывающих скобок, либо undefined, если n-ый набор захватывающих скобок еще не достигнут. Из-за обратного отслеживания многие состояния могут использоваться в любой момент в процессе сопоставления.

 

MatchResult

MatchResult (Результат Сопоставления) — это либо Состояние State, либо сбой специального токена failure, который указывает, что сопоставление не удалось.

 

Continuation

Continuation (Продолжение) — это Абстрактное Замыкание, которое принимает один аргумент состояния и возвращает результат сопоставления MatchResult. Продолжение пытается сопоставить оставшуюся часть (указанную захваченными значениями замыкания) паттерна (шаблона) с входом Input, начиная с промежуточного Состояния, заданного его аргументом State. Если сопоставление завершается успешно, Продолжение возвращает конечное Состояние State, которого оно достигло; если совпадение не удается, продолжение возвращает отказ — failure.

 

Matcher

Matcher (Сопоставитель) — это Абстрактное Замыкание, которое принимает два аргумента — Состояние State и Продолжение Continuation — и возвращает результат сопоставления MatchResult.

Matcher пытается сопоставить средний подшаблон (заданный захваченными значениями замыкания) шаблона с Input, начиная с промежуточного состояния, заданного его аргументом State. Аргумент продолжения Continuation должен быть закрытием, которое сопоставляетс остальную часть паттерна  (шаблона).

После сопоставления подшаблона из шаблона для получения нового State, Matcher затем вызывает Continuation для этого нового State, чтобы проверить, может ли остальная часть шаблона также совпадать. Если может, Сопоставитель возвращает состояние, возвращенное продолжением; в противном случае Matcher может пробовать разные варианты выбора в своих «точках выбора» (choice points), многократно вызывая продолжение, пока либо не добьется успеха, либо все возможности не будут исчерпаны.

 

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

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