繁体   English   中英

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

[英]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
    • 位于任何地方(前面有任何东西.*
    • [?&]之前是? &
    • 后跟其值(= [^&\\ s] *)
    • 以params( $ )或另一个param( & )结束

如果您正在寻找正则表达式,那么您可以使用:

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

RegEx演示

RegEx详细信息:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM