¿Cuál es el significado de la gbandera en expresiones regulares?
¿Cuál es la diferencia entre /.+/gy /.+/?
javascript
regex
intelis
fuente
fuente

var r = /a/g; console.log(r.test('a'), r.test('a')); // true falseEjemplo en Javascript para explicar:
fuente
ges 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
/.+/gy/.+/es que lagversión encontrará cada ocurrencia en lugar de solo la primera.fuente
No hay diferencia entre
/.+/gy/.+/porque ambos solo coincidirán con la cadena completa una vez. Lagmarca 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
gbandera también establece lalastIndexpropiedad.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
gbandera ya mencionado , influye en laregexp.lastIndexpropiedad: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