Réponses:
g
est pour la recherche globale. Cela signifie qu'il correspondra à toutes les occurrences. Vous verrez également généralement i
ce qui signifie ignorer la casse.
Référence: globale - JavaScript | MDN
L'indicateur "g" indique que l'expression régulière doit être testée par rapport à toutes les correspondances possibles dans une chaîne.
Sans le g
drapeau, il ne testera que le premier.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
g
est l'indicateur de recherche globale.
L'indicateur de recherche globale permet à RegExp de rechercher un modèle dans toute la chaîne, créant un tableau de toutes les occurrences qu'il peut trouver correspondant au modèle donné.
La différence entre /.+/g
et /.+/
est que la g
version trouvera chaque occurrence au lieu de la première.
Il n'y a pas de différence entre /.+/g
et /.+/
car ils ne correspondront tous les deux qu'une seule fois à la chaîne entière. 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()
renvoie un tableau des correspondances au lieu d'un tableau des groupes.
Comme @matiska l'a souligné, l' g
indicateur définit également la lastIndex
propriété.
Un effet secondaire très important de ceci est que si vous réutilisez la même instance de regex avec une chaîne correspondante, cela finira par échouer car il ne commencera à rechercher que sur le lastIndex
.
// regular regex
const regex = /foo/;
// same regex with global flag
const regexG = /foo/g;
const str = " foo foo foo ";
const test = (r) => console.log(
r,
r.lastIndex,
r.test(str),
r.lastIndex
);
// Test the normal one 4 times (success)
test(regex);
test(regex);
test(regex);
test(regex);
// Test the global one 4 times
// (3 passes and a fail)
test(regexG);
test(regexG);
test(regexG);
test(regexG);
Outre la signification déjà mentionnée du g
drapeau, il influence la regexp.lastIndex
propriété:
LastIndex est une propriété entière en lecture / écriture d'instances d'expressions régulières qui spécifie l'index à partir duquel commencer la correspondance suivante. (...) Cette propriété n'est définie que si l'instance d'expression régulière a utilisé l'indicateur "g" pour indiquer une recherche globale.
Référence: Mozilla Developer Network
G dans les expressions régulières est a définit une recherche globale, ce qui signifie qu'il rechercherait toutes les instances sur toutes les lignes.
g
->
renvoie toutes les correspondanceswithout g
->
renvoie la première correspondanceexemple:
'1 2 1 5 6 7'.match(/\d+/)
revient ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]
. Comme vous le voyez, nous ne pouvons prendre que le premier match "1"
.'1 2 1 5 6 7'.match(/\d+/g)
renvoie un tableau de toutes les correspondances ["1", "2", "1", "5", "6", "7"]
.