J'utilise JavaScript et j'ai besoin d'une expression regex pour faire correspondre tout ce qui se trouve entre "foo".
Quand j'utilise la chaîne suivante.
((&foo=)(.*))*
Elle devrait renvoyer
match1: test1 match2: test2 match3: test3%20test4
J'ai essayé l'expression suivante
&foo=test1&foo=test2&foo=test3%20test4
mais malheureusement, elle a renvoyé toute la chaîne.
Comment puis-je améliorer mon expression regex?
3 Réponses :
Cette expression n'utilise pas Ensuite, en utilisant des groupes de capture, vous pouvez capturer tout ce que vous voulez. Vous pouvez tester / modifier / changer / pratiquer vos expressions dans ce lien , si vous le souhaitez. Ceci link vous aide à visualiser vos expressions: Sur la base des conseils de toto , il est préférable de changez . * , mais il peut être prudent d'ajouter une liste de caractères entre foo = et le & code suivant >, peut-être similaire à: foo=([A-Z-a-z0-9%]+)&?
Graphique descriptif RegEx
Test JavaScript
const regex = /foo=([A-z0-9%]+)&?/gm;
const str = `&foo=test1&foo=test2&foo=test3%20test4&foo=test1&foo=test2&foo=test3%20test4&foo=test1&foo=test2&foo=test3%20test4`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Edit
Az en A-Za-z ou vous pouvez utiliser az avec l'indicateur i , sur la base des conseils de Limbo, puisque Az transmet également d'autres caractères tels que [ et .foo=([A-z0-9%]+)&?
[A-z] correspond à plus de lettres, voir un tableau ASCII.
... ou utilisez l'indicateur i
Cela fonctionne, enregistrez le groupe de capture 1 dans un tableau.
&foo=([\S\s *?)(?=&foo=|$)
Au lieu d'utiliser des expressions régulières, je suggère d'utiliser la classe intégrée URLSearchParams :
const params = new URLSearchParams('&foo=test1&foo=test2&foo=test3%20test4');
params.getAll('foo');
// ["test1", "test2", "test3 test4"]
Fonctionne dans tous les principaux navigateurs. (Nécessite un polyfill pour IE 11, si cela vous intéresse.)
S'il n'y a pas de qs autre que
fooalorsfoo = ([^ &] +)suffit.