Capturer plusieurs groupes dans des expressions régulières JavaScript
Lorsque vous travaillez avec des expressions régulières en JavaScript, il est courant de rencontrer des situations dans lesquelles vous devez capturer plusieurs groupes de données. Cependant, dans certains cas, le comportement attendu de capture de tous les groupes correspondants peut ne pas être obtenu.
Par exemple, considérons le code JavaScript suivant :
"foo bar baz".match(/^(\s*\w+)+$/)
Vous pouvez vous attendre à ce que le code renvoie un tableau contenant toutes les correspondances capturées :
["foo bar baz", "foo", " bar", " baz"]
Cependant, le résultat réel est :
["foo bar baz", " baz"]
Cela se produit car en mode régulier expressions, lorsque vous répétez un groupe de capture, seule la dernière capture est conservée. Il s'agit du comportement par défaut dans la plupart des versions d'expression régulière.
Solutions de contournement pour capturer toutes les correspondances
Si vous devez capturer tous les groupes correspondants, quelques options sont disponibles :
Exemple d'utilisation d'une boucle d'exécution
L'exemple suivant montre la correspondance de plusieurs groupes à l'aide d'une boucle d'exécution :
var text = "a;b;<c;d;e;f>;g;h;i;<no no no>;j;k;<xx;yy;zz>"; var r = /<(\w+(;\w+)*)>/g; var match; while ((match = r.exec(text)) != null) { console.log(match[1].split(";")); } // [ 'c', 'd', 'e', 'f' ] // [ 'xx', 'yy', 'zz' ]
Ressources supplémentaires
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!