RegExp.prototype.sticky

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Сводка

Свойство sticky отражает тот факт, является ли поиск «липким» (то есть, начинается ли он с индекса, на который указывает свойство lastIndex регулярного выражения). Свойство sticky является свойством только для чтения и принадлежит экземпляру регулярного выражения.

Атрибуты свойства RegExp.prototype.sticky
Записываемое нет
Перечисляемое нет
Настраиваемое нет

Описание

Значение свойства sticky имеет тип Boolean и содержит true, если при определении регулярного выражения использовался флаг "y", в противном случае оно содержит false. Флаг "y" указывает на то, что регулярное выражение сопоставляется с целевой строкой начиная с позиции, на которую указывает его свойство lastIndex (и не пытается сопоставиться по любому более старшему индексу). Такое поведение позволяет эффективно использовать символ "^" сопоставления-с-началом в любом месте строки путём смены значения свойства lastIndex.

Вы не можете напрямую изменить это свойство.

Примеры

Пример: использование регулярных выражений с флагом «липучести»

Этот пример демонстрирует, как можно использовать флаг «липучести» регулярных выражений для сопоставления с отдельными строками многострочного ввода.

js
var text = "Первая строка\nВторая строка";
var regex = /(\S+) строка\n?/y;

var match = regex.exec(text);
console.log(match[1]); // напечатает 'Первая'
console.log(regex.lastIndex); // напечатает '14'

var match2 = regex.exec(text);
console.log(match2[1]); // напечатает 'Вторая'
console.log(regex.lastIndex); // напечатает '27'

var match3 = regex.exec(text);
console.log(match3 === null); // напечатает 'true'

Проверка совместимости

Во время выполнения можно проверить, поддерживается ли флаг «липучести», при помощи блока try { … } catch { … }. Для этого надо использовать либо выражение с eval(…), либо конструктор RegExp(строка регулярного выражения, строка-с-флагами) (поскольку нотация /регулярное выражение/флаги обрабатывается во время компиляции, исключение будет выброшено до того, как выполнение достигнет блока catch). Например:

js
var supports_sticky;
try {
  RegExp("", "y");
  supports_sticky = true;
} catch (e) {
  supports_sticky = false;
}
console.log(supports_sticky); // напечатает 'false' в Firefox 2 и 'true' в Firefox 3+

Спецификации

Specification
ECMAScript Language Specification
# sec-get-regexp.prototype.sticky

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также