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 解析器等代码工具。
一般规则是,如果您想解析参数,请使用 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:
.*)[?&]前面有?或& $) 或另一个参数 ( &)结尾