我正在尝试为视频列表构建过滤器。我设法组成一个字符串,其中包含用户选择进行过滤的所有值。此时,我通过URL将此字符串作为参数发送。
注意:请注意,用户可以选择较少的过滤器,因此可以选择
参数:status:3&site:4&categories:15,2,3&actors:33,5,36&search:Grass%20hopper%20
,可能会有所不同,但上面的示例是最大组合。
问题:如何使用正则表达式(JS)获取所有数据?
优先结果:['status=3', 'site=4', 'categories=15,2,3', 'actors=33,5,3', 'search=Grass hopper']
。
到目前为止,我已经说过:(\w+):(((\d+),)*(\d+)|(\d+))&*
,但不知道该怎么做。
提前谢谢。
答案 0 :(得分:2)
您只能将带有可选逗号的数字与正则表达式匹配,但不会匹配Grass hopper
等值。
您可以匹配 last /.../
中最右侧/
位于字符串末尾的键值(如果可以不存在,则为{{ 1}}量词应该在它之后添加)。
使用
?
请参阅regex demo。
解释:
\w+:(?!\/\/)[^&]+(?=[^\/]*\/$)
- 1个字母数字或下划线后跟\w+:
:
- (?!\/\/)[^&]+
以外的1个字符但不以&
开头(以避免匹配//
)http://
- 一个积极的预测,以检查我们是否在最后(?=[^\/]*\/$)
内。
/.../

另一个解决方案是使用正则表达式仅在var re = /\w+:(?!\/\/)[^&]+(?=[^\/]*\/$)/g;
var str = 'http://example.dev/admin#/videos/status:3&site:4&categories:15,2,3&actors:33,5,36&search:Grass hopper /';
var res= str.match(re);
if (res) {
res = res.map(function (x) {return x.replace(":", "=")});
document.body.innerHTML = "<pre>" + JSON.stringify(res, 0, 4) + "</pre>";
}
(demo)之后获取网址部分
video/
然后将videos\/([^\/]+)
与match[1]
分开:
&
&#13;