Risposte:
gè per la ricerca globale. Significa che corrisponderà a tutte le occorrenze. Di solito vedrai anche iche significa ignorare maiuscole e minuscole.
Riferimento: globale - JavaScript | MDN
Il flag "g" indica che l'espressione regolare deve essere verificata rispetto a tutte le possibili corrispondenze in una stringa.
Senza la gbandiera, testerà solo il primo.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
g è il flag di ricerca globale.
Il flag di ricerca globale fa in modo che RegExp cerchi un pattern in tutta la stringa, creando un array di tutte le occorrenze che può trovare corrispondenti al pattern dato.
Quindi la differenza tra /.+/ge /.+/ è che la gversione troverà ogni occorrenza invece che solo la prima.
Non c'è differenza tra /.+/ge /.+/perché entrambi corrisponderanno sempre e solo all'intera stringa una volta. La gfa differenza se l'espressione regolare potrebbe corrispondere a più di una volta o contiene gruppi, nel qual caso .match()restituirà un array delle partite invece che una matrice dei gruppi.
Come ha sottolineato @matiska, anche il gflag imposta la lastIndexproprietà.
Un effetto collaterale molto importante di questo è che se stai riutilizzando la stessa istanza di regex su una stringa corrispondente, alla fine fallirà perché inizia la ricerca solo nel file 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);
Oltre al già citato significato di gbandiera, influenza la regexp.lastIndexproprietà:
LastIndex è una proprietà intera di lettura / scrittura delle istanze di espressioni regolari che specifica l'indice in corrispondenza del quale avviare la corrispondenza successiva. (...) Questa proprietà è impostata solo se l'istanza dell'espressione regolare ha utilizzato il flag "g" per indicare una ricerca globale.
Riferimento: Mozilla Developer Network
G nelle espressioni regolari è a definisce una ricerca globale, il che significa che cercherà tutte le istanze su tutte le righe.
g -> restituisce tutte le corrispondenzewithout g -> restituisce la prima corrispondenzaesempio:
'1 2 1 5 6 7'.match(/\d+/)ritorna ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]. Come vedi possiamo prendere solo la prima partita "1".'1 2 1 5 6 7'.match(/\d+/g)restituisce un array di tutte le corrispondenze ["1", "2", "1", "5", "6", "7"].