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?
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?
Réponses:
Voyons d'abord ce que fait chaque fonction:
regexObject . test ( String )
Exécute la recherche d'une correspondance entre une expression régulière et une chaîne spécifiée. Renvoie vrai ou faux .
chaîne . match ( RegExp )
Utilisé pour récupérer les correspondances lors de la mise en correspondance d'une chaîne avec une expression régulière. Renvoie un tableau avec les correspondances ou
null
s'il n'y en a pas.
Depuis null
évalue à false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
Y a-t-il une différence concernant les performances?
Oui . J'ai trouvé cette courte note sur le site MDN :
Si vous devez savoir si une chaîne correspond à une expression régulière regexp, utilisez regexp.test (string).
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:
À 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 du g
drapeau global.
.test()
. :)
N'oubliez pas de prendre en compte le drapeau global dans votre expression régulière:
var reg = /abc/g;
!!'abcdefghi'.match(reg); // => true
!!'abcdefghi'.match(reg); // => true
reg.test('abcdefghi'); // => true
reg.test('abcdefghi'); // => false <=
En effet, Regexp garde la trace du lastIndex lorsqu'une nouvelle correspondance est trouvée.
.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
test 4267740 ops / sec ± 1,32% (60 passages échantillonnés)
3 649 719 opérations / s ± 2,51% (60 cycles échantillonnés)
correspond à 3 623 125 opérations / s ± 1,85% (62 séries échantillonnées)
index De 6 230 325 ops / sec ± 0,95% (62 passages échantillonnés)
la méthode de test est plus rapide que la méthode de correspondance, mais la méthode la plus rapide est l'indexOf