Plusieurs fois, j'utilise la fonction string match
pour savoir si une chaîne correspond à une expression régulière.
if(str.match(/{regex}/))
Y a-t-il une différence entre ceci:
if (/{regex}/.test(str))
Ils semblent donner le même résultat?
Voyons d’abord ce que fait chaque fonction:
regexObject . test ( Chaîne )
Exécute la recherche d'une correspondance entre une expression régulière et une chaîne spécifiée. Retourne vrai ou faux .
chaîne . correspondance ( RegExp )
Utilisé pour récupérer les correspondances lors de la correspondance d'une chaîne avec une expression régulière. Retourne un tableau avec les correspondances ou
null
s'il n'y en a pas.
Puisque null
est évalué à false
,
if ( string.match(regex) ) {
// There was a match.
} else {
// No match.
}
Y a-t-il une différence de performance?
Oui . J'ai trouvé cette courte note dans le site MDN :
Si vous avez besoin de 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 une fois de plus est OUI! Ceci jsPerf Je montre que la différence est ~ 30% - ~ 60% selon le navigateur:
Utilisez .test
si vous voulez une vérification booléenne plus rapide. Utilisez .match
pour récupérer toutes les correspondances lorsque vous utilisez l'indicateur global g
.
N'oubliez pas de prendre en compte le drapeau global dans votre expression rationnelle:
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 quand une nouvelle correspondance est trouvée.