¿Cuál es el significado de la g
bandera en expresiones regulares?
¿Cuál es la diferencia entre /.+/g
y /.+/
?
javascript
regex
intelis
fuente
fuente
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
Ejemplo en Javascript para explicar:
fuente
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 lag
versión encontrará cada ocurrencia en lugar de solo la primera.fuente
No hay diferencia entre
/.+/g
y/.+/
porque ambos solo coincidirán con la cadena completa una vez. Lag
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.fuente
Como señaló @matiska, la
g
bandera también establece lalastIndex
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
.fuente
Además del significado de
g
bandera ya mencionado , influye en laregexp.lastIndex
propiedad:Referencia: Mozilla Developer Network
fuente
G en expresiones regulares define una búsqueda global, lo que significa que buscaría todas las instancias en todas las líneas.
fuente
Dará un ejemplo basado en una cadena. Si queremos eliminar todas las ocurrencias de una cadena. Digamos si queremos eliminar todas las apariciones de "o" con "" de "hola mundo"
fuente
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"]
.fuente