Qual é o significado do g
sinalizador em expressões regulares?
Qual é a diferença entre /.+/g
e /.+/
?
javascript
regex
intelis
fonte
fonte
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
Exemplo em Javascript para explicar:
fonte
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 ag
versão encontrará todas as ocorrências em vez de apenas a primeira.fonte
Não há diferença entre
/.+/g
e/.+/
porque os dois sempre corresponderão à string inteira uma vez. Og
faz diferença se a expressão regular pode corresponder mais de uma vez ou contém grupos, caso em que.match()
irá retornar uma matriz dos jogos, em vez de uma matriz dos grupos.fonte
Como @matiska apontou, o
g
sinalizador também define alastIndex
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
.fonte
Ao lado do já mencionado significado de
g
bandeira, influencia aregexp.lastIndex
propriedade:Referência: Mozilla Developer Network
fonte
G em expressões regulares é um define uma pesquisa global, o que significa que pesquisaria todas as instâncias em todas as linhas.
fonte
Dará exemplo baseado em string. Se quisermos remover todas as ocorrências de uma string. Digamos que se deseje remover todas as ocorrências de "o" com "" de "hello world"
fonte
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"]
.fonte