3 回答
TA贡献1995条经验 获得超2个赞
该表达式不使用.*
,相反,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%]+)&?
TA贡献1869条经验 获得超4个赞
建议不要使用正则表达式,而建议使用内置URLSearchParams类:
const params = new URLSearchParams('&foo=test1&foo=test2&foo=test3%20test4');
params.getAll('foo');
// ["test1", "test2", "test3 test4"]
在所有主流浏览器中均可使用。(如果这对您很重要,则需要IE 11的polyfill。)
添加回答
举报