Quelle est la signification du drapeau g
dans les expressions régulières?
Quelle est la différence entre /.+/g
et /.+/
?
Quelle est la signification du drapeau g
dans les expressions régulières?
Quelle est la différence entre /.+/g
et /.+/
?
g
est pour une recherche globale. Cela signifie qu'elle correspondra à toutes les occurrences. Vous verrez généralement aussi i
qui signifie ignorer la casse.
Reference: global - JavaScript | MDN
Le drapeau "g" indique que l'expression régulière doit être testée contre toutes les correspondances possibles dans une chaîne.
Sans le drapeau g
, elle ne testera que pour la première.
De plus, assurez-vous de vérifier la réponse de cchamberlain ci-dessous pour des détails sur la façon dont elle définit la propriété lastIndex
, ce qui peut entraîner des effets secondaires inattendus lors de la réutilisation d'une regex contre une série de valeurs.
Donc le drapeau /g est sans importance lors de l'utilisation de la fonction .test, car elle ne trouve de toute façon que la première correspondance, n'est-ce pas?
Comme @matiska l'a souligné, le drapeau g
définit également la propriété lastIndex
.
Un effet secondaire très important de cela est que si vous réutilisez la même instance regex contre une chaîne correspondante, elle échouera éventuellement car elle ne commence la recherche qu'à partir du lastIndex
.
// regex normale
const regex = /foo/;
// même regex avec le drapeau global
const regexG = /foo/g;
const str = " foo foo foo ";
const test = (r) => console.log(
r,
r.lastIndex,
r.test(str),
r.lastIndex
);
// Tester la normale 4 fois (réussi)
test(regex);
test(regex);
test(regex);
test(regex);
// Tester la globale 4 fois
// (3 succès et un échec)
test(regexG);
test(regexG);
test(regexG);
test(regexG);
g
est le drapeau de recherche global.
Le drapeau de recherche global permet à l'expression régulière de rechercher un motif dans toute la chaîne, créant un tableau de toutes les occurrences qu'elle peut trouver correspondant au motif donné.
Donc, la différence entre /.+/g
et /.+/
est que la version avec g
trouvera chaque occurrence au lieu de seulement la première.
Il n'y a pas de différence entre /.+/g
et /.+/
car ils ne correspondront chacun qu'à l'ensemble de la chaîne une seule fois. Le g
fait une différence si l'expression régulière peut correspondre plus d'une fois ou contient des groupes, auquel cas .match()
renverra un tableau des correspondances au lieu d'un tableau des groupes.
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.