Si votre expression régulière est globale et que vous effectuez une capture, vous devez utiliser exec. Match ne renverra pas toutes vos captures.
Match fonctionne très bien pour la correspondance (pas la capture). Vous l'exécutez une fois et il donne un tableau de toutes les correspondances. (bien que si l'expression régulière n'est pas globale, la correspondance affichera la correspondance suivie de captures)
Exec est ce que vous utilisez lorsque vous capturez, et chaque fois qu'il est exécuté, il donne la correspondance, suivie des captures. (la correspondance se comportera de manière à donner la correspondance complète suivie de captures, uniquement lorsque l'expression régulière n'est pas globale).
Une autre utilisation avec Exec consiste à obtenir l'index ou la position d'une correspondance. Lorsque vous avez une variable pour votre regex, vous pouvez utiliser .lastIndex et obtenir la position de la correspondance. Un objet regex a .lastIndex, et l'objet regex est ce que vous faites .exec. La correspondance de point est effectuée sur une chaîne et vous ne pourrez pas faire l'objet regex dot lastIndex
Une chaîne, a la fonction de correspondance, qui reçoit une expression régulière. Et une expression régulière, a la fonction exec, et reçoit une chaîne
exec vous exécutez plusieurs fois. match vous courez une fois
Il est bon d'utiliser match lorsque vous ne capturez pas et lors de la capture, vous pouvez utiliser exec qui est plus puissant car il est bon pour obtenir des captures, mais si vous avez utilisé match lors de la capture, voyez qu'il affiche les captures lorsque l'expression régulière n'est pas globale, mais ne le fait pas 't show capture lorsque le regex est global.
> "azb".match(/a(z)b/);
[ "azb", "z" ]
> "azb".match(/a(z)b/g);
[ "azb" ]
>
Une autre chose est que si vous utilisez exec, notez qu'il est appelé sur l'expression régulière, alors si vous avez utilisé une variable pour l'expression régulière, vous avez plus de puissance
Vous n'obtenez pas les correspondances lorsque vous n'utilisez pas la variable pour l'expression régulière, utilisez donc la variable pour l'expression régulière, lorsque vous utilisez exec
> /./g.exec("abc")
[ "a" ]
> /./g.exec("abc")
[ "a" ]
> /./g.exec("abc")
[ "a" ]
>
> /[a-c]/g.exec("abc")
[ "a" ]
> /[a-c]/g.exec("abc")
[ "a" ]
>
> var r=/[a-c]/g
> r.exec("abc")
[ "a" ]
> r.exec("abc")
[ "b" ]
> r.exec("abc")
[ "c" ]
> r.exec("abc")
null
>
Et avec exec, vous pouvez obtenir l '"index" du match
> var r=/T/g
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
2
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
6
> r.exec("qTqqqTqqTq");
[ "T" ]
> r.lastIndex
9
> r.exec("qTqqqTqqTq");
null
> r.lastIndex
0
>
Donc, si vous voulez des index ou capturer, alors utilisez exec (gardez à l'esprit que comme vous pouvez le voir, avec le "index", le "index" qu'il donne est vraiment une nième occurrence, il compte à partir de 1. Donc vous pouvez dériver le bon index en soustrayant 1. Et comme vous pouvez le voir, il donne 0 - lastIndex de 0 - pour non trouvé).
Et si vous voulez étirer la correspondance, vous pouvez l'utiliser lorsque vous capturez, mais pas lorsque l'expression régulière est globale, et lorsque vous le faites pour cela, alors le contenu du tableau ne correspond pas à toutes les correspondances, mais est complet match suivi des captures.
exec
pour obtenir toutes les sous-sélections.