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?
javascript
regex
performance
gdoron está apoiando Monica
fonte
fonte
Respostas:
Uso básico
Primeiro, vamos ver o que cada função faz:
regexObject . teste ( String )
string . match ( RegExp )
Como
null
avalia comofalse
,atuação
Existe alguma diferença em relação ao desempenho?
Sim . Encontrei esta breve nota no site MDN :
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:
Conclusão
Use
.test
se você quiser uma verificação booleana mais rápida. Use.match
para recuperar todas as correspondências ao usar ag
bandeira global.fonte
.test()
. :)Não se esqueça de levar em consideração a bandeira global no seu regexp:
Isso ocorre porque o Regexp monitora o lastIndex quando uma nova correspondência é encontrada.
fonte
.test()
? não é o ponto de.test()
verificar se a string tem um regexp correspondente?Este é o meu resultado de benchmark
O método de teste é mais rápido que o método de correspondência, mas o método mais rápido é o indexOf
fonte