Plusieurs fois, j'utilise la match
fonction chaîne pour savoir si une chaîne correspond à une expression régulière.
if(str.match(/{regex}/))
Y a-t-il une différence entre cela:
if (/{regex}/.test(str))
Ils semblent donner le même résultat?
javascript
regex
performance
gdoron soutient Monica
la source
la source
Réponses:
Utilisation de base
Voyons d'abord ce que fait chaque fonction:
regexObject . test ( String )
chaîne . match ( RegExp )
Depuis
null
évalue àfalse
,Performance
Y a-t-il une différence concernant les performances?
Oui . J'ai trouvé cette courte note sur le site MDN :
La différence est-elle significative?
La réponse est encore OUI ! Ce jsPerf que j'ai mis en place montre que la différence est de ~ 30% - ~ 60% selon le navigateur:
Conclusion
À utiliser
.test
si vous souhaitez une vérification booléenne plus rapide. Utilisez.match
pour récupérer toutes les correspondances lors de l'utilisation dug
drapeau global.la source
.test()
. :)N'oubliez pas de prendre en compte le drapeau global dans votre expression régulière:
En effet, Regexp garde la trace du lastIndex lorsqu'une nouvelle correspondance est trouvée.
la source
.test()
? n'est pas le point de.test()
vérifier si la chaîne a une expression rationnelle correspondante?Ce sont mes résultats de référence
la méthode de test est plus rapide que la méthode de correspondance, mais la méthode la plus rapide est l'indexOf
la source