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 setembro de 2016.
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
const str1 = "table football"; const regex1 = new RegExp("foo", "y"); regex1.lastIndex = 6; console.log(regex1.sticky); // Expected output: true console.log(regex1.test(str1)); // Expected output: true console.log(regex1.test(str1)); // Expected output: false 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
yfor usada em um padrão, ^ indica que a correspondência ocorrerá apenas no início da entrada, ou (semultilinefortrue) 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® 2026 Language Specification> # sec-get-regexp.prototype.sticky> |