[英]Regex to match specific path with specific query param
我正在努力创建正则表达式以匹配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
我需要在/page
专门针对param target
这个正则表达式只能找到参数\\A?target=[^&]+&*
。
谢谢!
更新:第三方工具需要它来决定运行实验的页面。 它只接受仪表板上的设置,并且常规表现,所以我不能使用URL解析器等代码工具。
一般规则是,如果要解析params,请使用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]*($|&)
匹配param name target
:
.*
) [?&]
之前是?
或&
$
)或另一个param( &
)结束 如果您正在寻找正则表达式,那么您可以使用:
/\/page\?(?:.*&)?target=[^&]*/i
RegEx详细信息:
\\/page\\?
:匹配文字/page?
: (?:.*&)?
:匹配任意长度的可选文本,后跟&
target=[^&]*
:匹配文本target=
后跟0个或更多不是&
字符
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.