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?
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?
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.
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?
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.