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.
La propriété sticky
(adhérante) permet de déterminer si la recherche s'effectue uniquement à partir de l'indice lastIndex
lié à l'expression rationnelle ou non). sticky
est une propriété accessible en lecture seule, rattachée à l'instance.
Exemple interactif
Attributs de RegExp.prototype.sticky |
|
---|---|
Écrivable | Non |
Énumérable | Non |
Configurable | Oui |
Description
La propriété sticky
est un booléen qui vaut true
si le marqueur (flag) "y
" a été utilisé, false
sinon. Ce marqueur indique que les correspondances ne sont recherchées qu'à partir de l'indice lastIndex
au niveau de la chaîne de caractères (les correspondances à partir des autres positions ne seront pas trouvées). Lorsqu'une expression rationnelle qui utilise le marqueur sticky
et le marqueur global
ignorera le marqueur global
.
La propriété sticky
ne peut pas être modifiée directement. Elle est uniquement en lecture seule.
Exemples
Utiliser une expression rationnelle avec le flag sticky
var str = "#toto#";
var regex = /toto/y;
regex.lastIndex = 1;
regex.test(str); // true
regex.lastIndex = 5;
regex.test(str); // false (lastIndex est pris en compte avec sticky)
regex.lastIndex; // 0 (on rénitialise après un échec)
Marqueur d'adhérence « ancré »
Pendant plusieurs versions, le moteur JavaScript de Firefox, SpiderMonkey, avait un bug qui entraînait des correspondances invalides lorsqu'étaient utilisés le marqueur d'adhérence et le symbole ^
dans l'expression rationnelle. Ce bug est apparu peu après Firefox 3.6. Afin d'éviter ce bug, la spécification ES2015 indique spécifiquement que, lorsque le marqueur y
est utilisé avec un motif commençant par ^
, ce dernier doit correspondre au début de la chaine (ou, si multiline
vaut true
, au début de la ligne). Les exemples qui suivent illustrent le comportement correct :
var regex = /^foo/y;
regex.lastIndex = 2; // désactive la correspondance au début
regex.test("..foo"); // false
var regex2 = /^foo/my;
regex2.lastIndex = 2;
regex2.test("..foo"); // false
regex2.lastIndex = 2;
regex2.test(".\nfoo"); // true
Spécifications
Specification |
---|
ECMAScript Language Specification # sec-get-regexp.prototype.sticky |
Compatibilité des navigateurs
BCD tables only load in the browser