Когда метод сопоставления @@match
вызывается с аргументом string, выполняются следующие шаги:
1. Пусть rx будет значением this. 2. Если Type(rx) не является Object, выбросить исключение TypeError. 3. Пусть S будет ? ToString(string). 4. Пусть global будет ! ToBoolean(? Get(rx, "global")). 5. Если global равно false, то а. Вернуть ? RegExpExec(rx, S). 6. Иначе, а. Утверждено: global является true. b. Пусть fullUnicode будет ! ToBoolean(? Get(rx, "unicode")). c. Выполнить ? установить Set(rx, "lastIndex", +0𝔽, true). d. Пусть А будет ! ArrayCreate(0). е. Пусть n равно 0. f. Повторить, i. Пусть result будет ? RegExpExec(rx, S). ii. Если результат result равен null, то 1. Если n = 0, вернуть null. 2. Верните A. iii. Иначе, 1. Пусть matchStr будет ? ToString(? Get(result, "0")). 2. Выполнить ! CreateDataPropertyOrThrow(A, ! ToString(𝔽(n)), matchStr). 3. Если matchStr - пустая строка, тогда а. Пусть thisIndex будет ℝ(? ToLength(? Get(rx, "lastIndex"))). b. Пусть nextIndex будет AdvanceStringIndex(S, thisIndex, fullUnicode). c. Выполнить ? Установить Set(rx, "lastIndex", 𝔽(nextIndex), true). 4. Установите n равным n + 1.
Значение свойства «name» этой функции — «[Symbol.match]«.
Свойство @@match
используется абстрактной операцией IsRegExp для идентификации объектов, которые имеют базовое поведение регулярных выражений. Отсутствие свойства @@match
или наличие такого свойства, значение которого не приводит к логическому принуждению к true, указывает на то, что объект не предназначен для использования в качестве объекта регулярного выражения.
Информационные ссылки
Предыдущий раздел — ECMAScript | get RegExp.prototype.ignoreCase
Стандарт ECMAScript — Раздел «» — https://tc39.es/ecma262/#sec-regexp-regular-expression-objects
ECMAScript | Условные обозначения
ECMAScript | Свойства объекта-прототипа Регулярных Выражений