web-dev-qa-db-fra.com

Quelle est la signification du drapeau 'g' dans les expressions régulières?

Quelle est la signification de l'indicateur g dans les expressions régulières? 

Quelle est la différence entre /.+/g et /.+/?

77
intelis

g est pour la recherche globale. Cela signifie que ça va correspondre à toutes les occurrences. Vous verrez généralement aussi i qui signifie ignorer la casse.

Référence: global - JavaScript | MDN

L'indicateur "g" indique que l'expression régulière doit être testée par rapport à toutes les correspondances possibles d'une chaîne.

Sans le drapeau g, le test ne sera effectué que pour le premier.

91
sachleen

Exemple en Javascript pour expliquer:

> 'aaa'.match(/a/g)
[ 'a', 'a', 'a' ]

> 'aaa'.match(/a/)
[ 'a', index: 0, input: 'aaa' ]
27
Luke W

g est l'indicateur de recherche globale.

L'indicateur de recherche globale permet à RegExp de rechercher un modèle dans la chaîne, en créant un tableau de toutes les occurrences qu'il peut trouver correspondant au modèle donné.

La différence entre /.+/g et /.+/ réside donc dans le fait que la version g trouvera toutes les occurrences au lieu de la première.

10
DaveyLaser

Il n'y a pas de différence entre /.+/g et /.+/ car ils ne feront jamais correspondre la chaîne entière qu'une seule fois. g fait une différence si l'expression régulière peut correspondre plusieurs fois ou contient des groupes, auquel cas .match() renverra un tableau des correspondances au lieu d'un tableau des groupes.

8
Neil

Comme @matiska l'a souligné, l'indicateur g définit également la propriété lastIndex.

Un effet secondaire très important de ceci est que si vous réutilisez la même instance regex avec une chaîne correspondante, celle-ci finira par échouer car elle ne lancera la recherche qu'à la 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);

6
cchamberlain

Outre la signification déjà mentionnée de g, elle influence la propriété regexp.lastIndex:

LastIndex est une propriété entière en lecture/écriture de l'expression régulière instances qui spécifient l'index auquel commencer la prochaine correspondance. (...) Cette propriété est définie uniquement si l'instance de l'expression régulière utilisé le drapeau "g" pour indiquer une recherche globale.

Référence: Mozilla Developer Network

5
matiska

G dans les expressions régulières est une définition d'une recherche globale, ce qui signifie qu'elle rechercherait toutes les occurrences sur toutes les lignes.

3
Neonguardian

Donnera un exemple basé sur une chaîne. Si nous voulons supprimer toutes les occurrences d'une chaîne Disons si nous voulons supprimer toutes les occurrences de "o" avec "" de "hello world"

"hello world".replace(/o/g,'');
0
Deepak