Respuestas:
g
es para búsqueda global. Lo que significa que coincidirá con todas las ocurrencias. Por lo general, también verá i
qué significa ignorar mayúsculas y minúsculas.
Referencia: global - JavaScript | MDN
La bandera "g" indica que la expresión regular debe probarse con todas las coincidencias posibles en una cadena.
Sin la g
bandera, solo probará la primera.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
g
es la bandera de búsqueda global.
La marca de búsqueda global hace que la RegExp busque un patrón a lo largo de la cadena, creando una matriz de todas las ocurrencias que puede encontrar que coincidan con el patrón dado.
Entonces, la diferencia entre /.+/g
y /.+/
es que la g
versión encontrará cada ocurrencia en lugar de solo la primera.
No hay diferencia entre /.+/g
y /.+/
porque ambos solo coincidirán con la cadena completa una vez. La g
marca una diferencia si la expresión regular podría coincidir más de una vez o contiene grupos, en cuyo caso se .match()
devolverá una matriz de los partidos en lugar de una matriz de los grupos.
Como señaló @matiska, la g
bandera también establece la lastIndex
propiedad.
Un efecto secundario muy importante de esto es que si está reutilizando la misma instancia de expresión regular contra una cadena coincidente, eventualmente fallará porque solo comienza a buscar en el 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);
Además del significado de g
bandera ya mencionado , influye en la regexp.lastIndex
propiedad:
LastIndex es una propiedad entera de lectura / escritura de instancias de expresiones regulares que especifica el índice en el que comenzar la siguiente coincidencia. (...) Esta propiedad se establece solo si la instancia de expresión regular usó el indicador "g" para indicar una búsqueda global.
Referencia: Mozilla Developer Network
G en expresiones regulares define una búsqueda global, lo que significa que buscaría todas las instancias en todas las líneas.
g
->
devuelve todos los partidoswithout g
->
devuelve el primer partidoejemplo:
'1 2 1 5 6 7'.match(/\d+/)
devuelve ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]
. Como ves, solo podemos llevarnos el primer partido "1"
.'1 2 1 5 6 7'.match(/\d+/g)
devuelve una matriz de todas las coincidencias ["1", "2", "1", "5", "6", "7"]
.