【问题标题】:Regex to Match URL with a Specific Query Param (Javascript)正则表达式将 URL 与特定查询参数 (Javascript) 匹配
【发布时间】:2015-09-27 01:39:30
【问题描述】:

我需要匹配一组 URL,它们都必须包含特定的查询参数

(类型=VCL)

到目前为止我有/http:\/\/myhost:8080\/organization\/(\d*)\/mediaResource?.*$/

http://myhost:8080/organizaton/5/mediaResource?anyParam(s) 形式的 url 匹配,但如果 URL 包含查询参数 type=VCL,我只需要获取匹配项

点赞:http://myhost:8080/organization/5/mediaResource?someParam=foo&type=VCL

有人可以帮助处理正则表达式的最后一部分以仅获取包含我关心的查询参数的 URL 吗?

【问题讨论】:

  • 检查这个:regex101.com/r/lO1eS5/1 这很简单,表达式需要是 type=VCL 并且除非我不明白你在寻找什么......
  • 我会使用 queryString 解析器而不是正则表达式,这在考虑所有合法的实体编码形式时是脆弱的。

标签: javascript regex url


【解决方案1】:

您可以使用以下正则表达式:

http:\/\/myhost:8080\/organization\/(\d*)\/mediaResource\?\S*\btype=VCL\b\S*

demo

我只在 ? 之前添加了一个斜杠,以便它按字面意思匹配,添加 \S* 匹配 0 个或多个非空白符号,并添加 \btype=VCL\b 以便仅匹配具有此参数的那些 URL。

【讨论】:

    【解决方案2】:

    我强烈建议为此使用 URI 解析器 - 它更易于阅读且更易于维护,并且有人已经完成了测试组成正则表达式的工作。

    我在这个轻量级的产品上取得了很好的成功:

    http://blog.stevenlevithan.com/archives/parseuri

    【讨论】:

    • 这是在一些模拟量角器中的一些内联路由,你认为你的建议适用吗?
    • 我不明白为什么不这样做。如果有的话,通过长期测试的代码将 URI 解析为易于操作的结构应该会使这更容易。例如,更改逻辑以使用其他查询参数、锚标记或主机或某种组合是微不足道的。然而,一个月后您可能很难准确地记住您的自定义、单参数正则表达式是如何工作的,更不用说可靠地修改它了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2011-02-19
    • 2017-12-01
    相关资源
    最近更新 更多