猿问

正则表达式匹配&foo =之间的所有内容,直到再次出现

我正在使用JavaScript,我需要一个正则表达式来匹配“ foo”之间的所有内容。


当我使用以下字符串时。


&foo=test1&foo=test2&foo=test3%20test4

它应该返回


match1: test1

match2: test2

match3: test3%20test4

我尝试了以下表达式


((&foo=)(.*))*

但不幸的是,它返回了整个字符串。


如何改善我的正则表达式表达?


慕神8447489
浏览 173回答 3
3回答

拉风的咖菲猫

该表达式不使用.*,相反,foo=在下一个之间添加一个字符列表可能是安全的&,可能类似于:foo=([A-z0-9%]+)&?然后,使用捕获组可以捕获任何您想要的东西。如果愿意,您可以在此链接中测试/修改/更改/练习您的表达式。RegEx描述图该链接可帮助您形象化您的表情:如果需要,可以在表达式中添加其他边界。您还可以扩展字符列表。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}`);    });}根据toto的建议,最好更改A-z为A-Za-z或者可以根据Limbo的建议a-z与flag一起使用i,因为A-z还会传递其他字符,例如[和]。foo=([A-Z-a-z0-9%]+)&?

MMTTMM

建议不要使用正则表达式,而建议使用内置URLSearchParams类:const params = new URLSearchParams('&foo=test1&foo=test2&foo=test3%20test4');params.getAll('foo');// ["test1", "test2", "test3 test4"]在所有主流浏览器中均可使用。(如果这对您很重要,则需要IE 11的polyfill。)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答