MDN говорит:Что делает флаг regex 'y'?
Чтобы выполнить «липкий» поиск, что матчи, начиная с текущей позиции в целевой строке, используйте флаг у.
Я не совсем понимаю.
MDN говорит:Что делает флаг regex 'y'?
Чтобы выполнить «липкий» поиск, что матчи, начиная с текущей позиции в целевой строке, используйте флаг у.
Я не совсем понимаю.
Объекты регулярных выражений имеют свойство lastIndex
, которое используется по-разному в зависимости от g
(0) y
(sticky) flags. Флаг y
(sticky) указывает регулярному выражению искать соответствие по lastIndex
и только по адресу lastIndex
(не ранее или позже в строке).
Примеры стоят 1024 слов:
var str = "a0bc1";
// Indexes:
var rexWithout = /\d/;
var rexWith = /\d/y;
// Without:
rexWithout.lastIndex = 2; // (This is a no-op, because the regex
// doesn't have either g or y.)
console.log(rexWithout.exec(str)); // ["0"], found at index 1, because without
// the g or y flag, the search is always from
// index 0
// With, unsuccessful:
rexWith.lastIndex = 2; // Says to *only* match at index 2.
console.log(rexWith.exec(str)); // => null, there's no match at index 2,
// only earlier (index 1) or later (index 4)
// With, successful:
rexWith.lastIndex = 1; // Says to *only* match at index 1.
console.log(rexWith.exec(str)); // => ["0"], there was a match at index 1.
// With, successful again:
rexWith.lastIndex = 4; // Says to *only* match at index 4.
console.log(rexWith.exec(str)); // => ["1"], there was a match at index 4.
.as-console-wrapper {
max-height: 100% !important;
}
Совместимость Примечание:
двигатель SpiderMonkey JavaScript браузера Firefox имел y
флаг в течение многих лет, но это WASN Часть спецификации до ES2015 (Июнь 2015 г.). Кроме того, довольно долго Firefox имел a bug in the handling of the y
flag в отношении утверждения ^
, но он был исправлен где-то между Firefox 43 (есть ошибка) и Firefox 47 (нет). Очень старые версии Firefox (скажем, 3.6) имели y
и не имели ошибки, поэтому это была регрессия, которая произошла позже (не определено поведение для флага y
), а затем исправлено.
Вы можете найти пример здесь:
Кроме того, что IMHO пример должен быть
var regex = /^(\S+) line\n?/y;
вместо
var regex = /(\S+) line\n?/y;
поскольку с этой линией код дает тот же результат, говорят ли вы
var regex = /(\S+) line\n?/y;
или
var regex = /(\S+) line\n?/g;