136 votes

Quelle est la différence entre la fonction exec () de RegExp et la fonction match () de String?

Si je lance ceci:

 /([^\/]+)+/g.exec('/a/b/c/d');
 

J'ai compris:

 ["a", "a"]
 

Mais si je lance ceci:

 '/a/b/c/d'.match(/([^\/]+)+/g);
 

Ensuite, j'obtiens le résultat attendu:

 ["a", "b", "c", "d"]
 

Quelle est la différence?

124voto

minitech Points 87225

exec avec une expression régulière globale est destiné à être utilisé dans une boucle, car il récupérera toutes les sous-expressions correspondantes. Alors:

 var re = /[^\/]+/g;
var match;

while (match = re.exec('/a/b/c/d')) {
    // match is now the next match, in array form.
}

// No more matches.
 

String.match fait pour vous et ignore les résultats des sous-expressions.

79voto

georg Points 52691

Une image est meilleure, vous savez ...

 re_once = /([a-z])([A-Z])/
re_glob = /([a-z])([A-Z])/g

st = "aAbBcC"
    
document.write("<br>match once="+ st.match(re_once)+ " match glob="+ st.match(re_glob))
document.write("<br>exec once="+ re_once.exec(st)+ " exec glob="+ re_glob.exec(st))
document.write("<br>exec once="+ re_once.exec(st)+ " exec glob="+ re_glob.exec(st))
document.write("<br>exec once="+ re_once.exec(st)+ " exec glob="+ re_glob.exec(st)) 

Regarde la différence?

30voto

Alex Ciminian Points 4648

/regex/.exec() ne renvoie que la première correspondance trouvée, tandis que "string".match() renvoie toutes si vous utilisez l'indicateur g dans l'expression régulière.

Voir ici: exec , match .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X