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

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
Writableno
Enumerableno
Configurableyes

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® 2025 Language Specification
# sec-get-regexp.prototype.sticky

Compatibilidade com navegadores

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
sticky
Anchored sticky flag behavior per ES2015
Prototype accessor property (ES2015)

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Veja também