42 votes

Que fait le drapeau "y" de l'expression rationnelle ?

MDN dit :

Pour effectuer une recherche " collante ", qui correspond à partir de la dans la chaîne cible, utilisez l'option y.

Je ne comprends pas bien.

61voto

T.J. Crowder Points 285826

Les objets d'expression régulière ont un lastIndex qui est utilisée de différentes manières en fonction de la propriété g ( mondial ) et y ( collant ) drapeaux. Le site y (collant) indique à l'expression régulière de rechercher une correspondance à l'endroit suivant lastIndex y seulement à l'adresse lastIndex (pas plus tôt ou plus tard dans la chaîne).

Les exemples valent 1024 mots :

var str =  "a0bc1";
// Indexes: 01234

var rexWithout = /\d/;
var rexWith    = /\d/y;

// Without:
rexWithout.lastIndex = 2;          // (This is a no-op, because the regex
                                   // doesn't have either g or y.)
console.log(rexWithout.exec(str)); // ["0"], found at index 1, because without
                                   // the g or y flag, the search is always from
                                   // index 0

// With, unsuccessful:
rexWith.lastIndex = 2;             // Says to *only* match at index 2.
console.log(rexWith.exec(str));    // => null, there's no match at index 2,
                                   // only earlier (index 1) or later (index 4)

// With, successful:
rexWith.lastIndex = 1;             // Says to *only* match at index 1.
console.log(rexWith.exec(str));    // => ["0"], there was a match at index 1.

// With, successful again:
rexWith.lastIndex = 4;             // Says to *only* match at index 4.
console.log(rexWith.exec(str));    // => ["1"], there was a match at index 4.

.as-console-wrapper {
  max-height: 100% !important;
}

Note de compatibilité :

Le moteur JavaScript SpiderMonkey de Firefox a eu le y depuis des années, mais il ne faisait pas partie des spécifications avant ES2015 (juin 2015). De plus, pendant un certain temps, Firefox avait un bogue dans la gestion de l'élément y drapeau en ce qui concerne le ^ affirmation, mais il a été corrigé quelque part entre Firefox 43 (a le bug) et Firefox 47 (ne l'a pas). Les très anciennes versions de Firefox (disons, 3.6) ont eu y et ne présentait pas le bogue, il s'agissait donc d'une régression qui s'est produite plus tard (comportement non défini pour la fonction y ), et a ensuite été corrigé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X