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.
A propriedade sticky
indica se a busca é "pegajosa" (percorre a string somente a partir do índice indicado pela propriedade lastIndex
desta expressão regular). A propriedade sticky
em um objeto de expressão regular é somente para leitura.
Experimente
Property attributes of RegExp.prototype.sticky | |
---|---|
Writable | no |
Enumerable | no |
Configurable | yes |
Descrição
O valor de sticky
é do tipo Boolean
e será true quando a flag "y
" for utilizada; senão, será false. A flag "y
" indica que as correspondências ocorrerão apenas a partir do indice indicado pela propriedade lastIndex
desta expressão regular na string alvo (e não buscará correspondência em nenhum índice anterior). Uma expressão regular definida como sticky
e global
ignora a flag global
.
Você não pode alterar essa propriedade diretamente. Ela é somente para leitura.
Exemplos
Uilizando uma expressão regular com a flag sticky
var str = "#foo#";
var regex = /foo/y;
regex.lastIndex = 1;
regex.test(str); // true
regex.lastIndex = 5;
regex.test(str); // false (lastIndex é levado em conta com a flag sticky)
regex.lastIndex; // 0 (reinicia quando não ocorre correspondência)
Flag sticky ancorada
Por diversas versões, a engine SpiderMonkey do Firefox apresentou um bug na asserção de ^
com a flag sticky que fazia expressões iniciando com ^
e usando a flag sticky encontrarem correspondências onde não deveriam. O bug foi introduzido algum tempo após o Firefox 3.6 (que possuía a flag sticky mas não apresentava o bug) e corrigido em 2015. Talvez por este motivo, a especificação ES2015 destaca especificamente que:
Quando a flag
y
for usada em um padrão, ^ indica que a correspondência ocorrerá apenas no início da entrada, ou (semultiline
fortrue
) no início de uma linha.
Exemplos de comportamento esperado:
var regex = /^foo/y;
regex.lastIndex = 2;
regex.test("..foo"); // false - índice 2 não é o início da string
var regex2 = /^foo/my;
regex2.lastIndex = 2;
regex2.test("..foo"); // false - índice 2 não é o início da string nem da linha
regex2.lastIndex = 2;
regex2.test(".\nfoo"); // true - índice 2 é o início da linha
Especificações
Specification |
---|
ECMAScript Language Specification # sec-get-regexp.prototype.sticky |
Compatibilidade com navegadores
BCD tables only load in the browser