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

js
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 (se multiline for true) no início de uma linha.

Exemplos de comportamento esperado:

js
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

Veja também