Respostas:
g
é para pesquisa global. O que significa que corresponderá a todas as ocorrências. Normalmente, você também verá o i
que significa ignorar maiúsculas e minúsculas.
Referência: global - JavaScript | MDN
O sinalizador "g" indica que a expressão regular deve ser testada em relação a todas as correspondências possíveis em uma string.
Sem a g
bandeira, ele só testará a primeira.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
g
é a bandeira de pesquisa global.
O sinalizador de pesquisa global faz com que o RegExp procure um padrão em toda a string, criando uma matriz de todas as ocorrências que pode encontrar correspondendo ao padrão fornecido.
Portanto, a diferença entre /.+/g
e /.+/
é que a g
versão encontrará todas as ocorrências em vez de apenas a primeira.
Como @matiska apontou, o g
sinalizador também define a lastIndex
propriedade.
Um efeito colateral muito importante disso é que se você estiver reutilizando a mesma instância de regex em uma string correspondente, ela acabará falhando porque só começa a pesquisar no 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);
Ao lado do já mencionado significado de g
bandeira, influencia a regexp.lastIndex
propriedade:
O lastIndex é uma propriedade inteira de leitura / gravação de instâncias de expressão regular que especifica o índice no qual iniciar a próxima correspondência. (...) Esta propriedade é definida apenas se a instância da expressão regular usou o sinalizador "g" para indicar uma pesquisa global.
Referência: Mozilla Developer Network
G em expressões regulares é um define uma pesquisa global, o que significa que pesquisaria todas as instâncias em todas as linhas.
g
->
retorna todas as partidaswithout g
->
retorna a primeira partidaexemplo:
'1 2 1 5 6 7'.match(/\d+/)
retorna ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]
. Como você vê, só podemos escolher a primeira partida "1"
.'1 2 1 5 6 7'.match(/\d+/g)
retorna uma matriz de todas as correspondências ["1", "2", "1", "5", "6", "7"]
.