--- title: RegExp.prototype.sticky slug: Web/JavaScript/Reference/Global_Objects/RegExp/sticky translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/sticky ---
A propriedade sticky
indica se a busca é "pegajosa" (percorre a string somente a partir do índice indicado pela propriedade {{jsxref("RegExp.lastIndex", "lastIndex")}} desta expressão regular). A propriedade sticky
em um objeto de expressão regular é somente para leitura.
O código fonte para este exemplo interativo está armazenado em um repositório GitHub. Caso deseje contribuir com o projeto de exemplos interativos, clone https://github.com/mdn/interactive-examples e nos envie um pull request.
O valor de sticky
é do tipo {{jsxref("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 {{jsxref("RegExp.lastIndex", "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.
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)
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ção | Estado | Comentário |
---|---|---|
{{SpecName('ES2015', '#sec-get-regexp.prototype.sticky', 'RegExp.prototype.sticky')}} | {{Spec2('ES2015')}} | Definição inicial. |
{{SpecName('ESDraft', '#sec-get-regexp.prototype.sticky', 'RegExp.prototype.sticky')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.RegExp.sticky")}}