REGEX URL(过滤器)DECIPHERING

时间:2016-04-08 07:20:06

标签: javascript angularjs regex filter

我正在尝试为视频列表构建过滤器。我设法组成一个字符串,其中包含用户选择进行过滤的所有值。此时,我通过URL将此字符串作为参数发送。

示例:http://example.dev/admin#/videos/status:3&site:4&categories:15,2,3&actors:33,5,36&search:Grass%20hopper%20/

注意:请注意,用户可以选择较少的过滤器,因此可以选择 参数: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+))&*,但不知道该怎么做。

提前谢谢。

1 个答案:

答案 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;
&#13;
&
&#13;
&#13;
&#13;