Muitas vezes, estou usando a match
função string para saber se uma string corresponde a uma expressão regular.
if(str.match(/{regex}/))
Existe alguma diferença entre isso:
if (/{regex}/.test(str))
Eles parecem dar o mesmo resultado?
Muitas vezes, estou usando a match
função string para saber se uma string corresponde a uma expressão regular.
if(str.match(/{regex}/))
Existe alguma diferença entre isso:
if (/{regex}/.test(str))
Eles parecem dar o mesmo resultado?
Respostas:
Primeiro, vamos ver o que cada função faz:
regexObject . teste ( String )
Executa a pesquisa de uma correspondência entre uma expressão regular e uma sequência especificada. Retorna verdadeiro ou falso .
string . match ( RegExp )
Usado para recuperar as correspondências ao corresponder uma sequência a uma expressão regular. Retorna uma matriz com as correspondências ou
null
se não houver nenhuma.
Como null
avalia como false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
Existe alguma diferença em relação ao desempenho?
Sim . Encontrei esta breve nota no site MDN :
Se você precisar saber se uma string corresponde a uma expressão regular regexp, use regexp.test (string).
A diferença é significativa?
A resposta mais uma vez é SIM ! Este jsPerf que montei mostra que a diferença é de ~ 30% a ~ 60%, dependendo do navegador:
Use .test
se você quiser uma verificação booleana mais rápida. Use .match
para recuperar todas as correspondências ao usar a g
bandeira global.
.test()
. :)
Não se esqueça de levar em consideração a bandeira global no seu regexp:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
Isso ocorre porque o Regexp monitora o lastIndex quando uma nova correspondência é encontrada.
.test()
? não é o ponto de .test()
verificar se a string tem um regexp correspondente?
Este é o meu resultado de benchmark
teste 4.267.740 ops / s ± 1,32% (60 execuções amostradas)
exec 3.649.719 ops / s ± 2,51% (60 execuções amostradas)
corresponder a 3.623.125 ops / s ± 1,85% (62 execuções amostradas)
índiceDe 6.230.325 ops / s ± 0,95% (62 execuções amostradas)
O método de teste é mais rápido que o método de correspondência, mas o método mais rápido é o indexOf