Esta tradução está incompleta. Por favor, ajude a traduzir este artigo.

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.

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 (se multiline for true) 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

Especificação Estado Comentário
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'RegExp.prototype.sticky' in that specification.
Padrão Definição inicial.
ECMAScript Latest Draft (ECMA-262)
The definition of 'RegExp.prototype.sticky' in that specification.
Rascunho  

Compatibilidade de navegadores

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
stickyChrome Full support 49Edge Full support 13Firefox Full support 3IE No support NoOpera Full support 36Safari Full support 10WebView Android Full support 49Chrome Android Full support 49Firefox Android Full support 4Opera Android Full support 36Safari iOS Full support 10Samsung Internet Android Full support 5.0nodejs Full support Yes
Prototype accessor property (ES2015)Chrome Full support YesEdge ? Firefox Full support 38IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 38Opera Android Full support YesSafari iOS Full support YesSamsung Internet Android Full support Yesnodejs Full support Yes
Anchored sticky flag behavior per ES2015Chrome Full support YesEdge Full support YesFirefox Full support 44IE No support NoOpera Full support YesSafari Full support YesWebView Android Full support YesChrome Android Full support YesFirefox Android Full support 44Opera Android ? Safari iOS ? Samsung Internet Android Full support Yesnodejs ?

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown

Veja também

Etiquetas do documento e colaboradores

Colaboradores desta página: saulobmansur
Última atualização por: saulobmansur,