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.