我正在努力创建正则表达式以将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解析器之类的代码工具。
答案 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]*(&|$)
说明:
\/page(?=\?)
-匹配路径(从/
开始,然后从page
开始,然后向前搜索?
).*[?&]target=[^&\s]*($|&)
与参数名称target
匹配:
.*
开头)[?&]
之前带有?
或&
$
)或另一个参数(&
)结尾答案 1 :(得分:1)
如果您要查找正则表达式,则可以使用:
/\/page\?(?:.*&)?target=[^&]*/i
RegEx详细信息:
\/page\?
:匹配文本/page?
:(?:.*&)?
:匹配任意长度的可选文本,后跟&
target=[^&]*
:匹配文本target=
,后跟0个或多个不是&
的字符