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

Kos*_*ika 3 javascript regex url query-string

我正在努力创建正则表达式来将 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
Run Code Online (Sandbox Code Playgroud)

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

该正则表达式仅适用于查找 param \A?target=[^&]+&*

谢谢!

更新: 需要第三方工具来决定在哪个页面上运行实验。它只接受在仪表板上使用常规表达式进行设置,因此我无法使用 URL 解析器等代码工具。

mrz*_*asa 5

一般规则是,如果您想解析参数,请使用 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'
Run Code Online (Sandbox Code Playgroud)

然后检查 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' {
  # ...
}

Run Code Online (Sandbox Code Playgroud)

也可以看看:

编辑

如果您必须使用正则表达式,请尝试以下之一:

\/page(?=\?).*[?&]target=[^&\s]*(&|$)
Run Code Online (Sandbox Code Playgroud)

演示

解释:

  • \/page(?=\?)/- 匹配路径(以 then开头page,然后向前查找?
  • .*[?&]target=[^&\s]*($|&)匹配参数名称target
    • 位于任何地方(前面有任何内容.*
    • [?&]前面有?&
    • 后跟其值 (=[^&\s]*)
    • 以参数结束 ( $) 或另一个参数 ( &)结尾