Это экспериментальная технология, часть предложения Harmony (ECMAScript 6).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.
Сводка
Свойство sticky
отражает тот факт, является ли поиск «липким» (то есть, начинается ли он с индекса, на который указывает свойство lastIndex
регулярного выражения). Свойство sticky
является свойством только для чтения и принадлежит экземпляру регулярного выражения.
Атрибуты свойстваRegExp.prototype.sticky |
|
---|---|
Записываемое | нет |
Перечисляемое | нет |
Настраиваемое | нет |
Описание
Значение свойства sticky
имеет тип Boolean
и содержит true
, если при определении регулярного выражения использовался флаг "y"
" flag was used; в противном случае оно содержит false
. Флаг "y"
указывает на то, что регулярное выражение сопоставляется с целевой строкой начиная с позиции, на которую указывает его свойство lastIndex
(и не пытается сопоставиться по любому более старшему индексу). Такое поведение позволяет эффективно использовать символ "^"
сопоставления-с-началом в любом месте строки путём смены значения свойства lastIndex
.
Вы не можете напрямую изменить это свойство.
Примеры
Пример: использование регулярных выражений с флагом «липучести»
Этот пример демонстрирует, как можно использовать флаг «липучески» регулярных выражений для сопоставления с отдельными строками многострочного ввода.
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
). Например:
var supports_sticky; try { RegExp('', 'y'); supports_sticky = true; } catch(e) { supports_sticky = false; } console.log(supports_sticky); // напечатает 'false' в Firefox 2 и 'true' в Firefox 3+
Спецификации
Спецификация | Статус | Комментарии |
---|---|---|
ECMAScript 6 (ECMA-262) Определение 'RegExp.prototype.sticky' в этой спецификации. |
Кандидат в рекомендации | Изначальное определение. |
Совместимость с браузерами
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | Нет | 3.0 (1.9) | Нет | Нет | Нет |
Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | Нет | Нет | 1.0 (1.9) | Нет | Нет | Нет |