正则表达式以将特定路径与特定查询参数匹配

时间:2019-08-08 20:02:59

标签: javascript regex url query-parameters

我正在努力创建正则表达式以将URL路径与可能在任何地方的查询参数相匹配。

例如,URL可能是:

/page?foo=bar&target=1&test=1 <- should match
/page?target=1&test=2 <- should match
/page/nested?foo=bar&target=1&test=1 <- should NOT match
/page/nested?target=1&test=2 <- should NOT match
/another-page?foo=bar&target=1&test=1 <- should NOT match
/another-page?target=1&test=2 <- should NOT match

我需要在target上专门针对参数/page

此正则表达式仅适用于找到参数\A?target=[^&]+&*

谢谢!

更新: 需要第三方工具来决定要在哪个页面上运行实验。它只接受定期扩展在其仪表板上的设置,因此我无法使用URL解析器之类的代码工具。

2 个答案:

答案 0 :(得分:2)

一般规则是,如果要解析参数,请使用URL解析器,而不是自定义正则表达式。

在这种情况下,您可以使用例如:

# http://a.b/ is just added to make URL parsing work
url = new URL("http://a.b/page?foo=bar&target=1&test=1")
url.searchParams.get("target")
# => 1
url.pathname
# => '/page'

然后在ifs中检查这些值:

url = new URL("http://a.b/page?foo=bar&target=1&test=1")

url = new URL("http://a.b/page?foo=bar&target=1&test=1")
if (url.searchParams.get("foo") && url.pathname == '/page' {
  # ...
}

另请参阅:

编辑

如果必须使用正则表达式,请尝试以下一种方法:

\/page(?=\?).*[?&]target=[^&\s]*(&|$)

Demo

说明:

  • \/page(?=\?)-匹配路径(从/开始,然后从page开始,然后向前搜索?
  • .*[?&]target=[^&\s]*($|&)与参数名称target匹配:
    • 位于任何地方(以.*开头)
    • [?&]之前带有?&
    • 其值(= [^&\ s] *)
    • 以参数结尾($)或另一个参数(&)结尾

答案 1 :(得分:1)

如果您要查找正则表达式,则可以使用:

/\/page\?(?:.*&)?target=[^&]*/i

RegEx Demo

RegEx详细信息:

  • \/page\?:匹配文本/page?
  • (?:.*&)?:匹配任意长度的可选文本,后跟&
  • target=[^&]*:匹配文本target=,后跟0个或多个不是&的字符