JavaScript Regex Global Flag

Isso não se aplica a todos os casos, mas na minha experiência:

  • Use o sinalizador global ao combinar expressões regulares em uma string.
  • Não use o sinalizador global ao testar .

Vou usar isso como meu exemplo:

var example = 'The tale of mats and bats';
var regex = /.ats/;
var regex_global = /.ats/g;

A correspondência retornará por padrão o primeiro resultado correspondido.

example.match(regex);
> ["mats"]

Normalmente, quero que todos os resultados sejam retornados em uma matriz organizada, portanto, o sinalizador global é útil.

example.match(regex_global);
> ["mats", "bats"]

Ao testar uma expressão regular, o regex não global funciona muito bem.

regex.test(example);
> true

No entanto, quando tento usar o global, obtenho resultados inconsistentes.

regex_global.test(example);
> true
regex_global
.test(example);
> true
regex_global
.test(example);
> false

Isso ocorre porque, quando testé chamado com uma regex global, ele salva a posição da última string correspondida e começa a partir dessa posição na próxima vez que for chamado. Como há duas correspondências em meu exemplo, trueé retornado nas duas primeiras vezes. No entanto, na terceira vez que é chamado, ele apenas testa a última parte da string de exemplo após a segunda correspondência, por isso falha.