正则表达式匹配特定路径与特定查询参数
Regex to match specific path with specific query param
我正在努力创建正则表达式来匹配 URL 路径和可能在任何地方的查询参数。
例如 URLs 可以是:
/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
上专门针对参数 target
此正则表达式仅适用于查找参数 \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'
然后在 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' {
# ...
}
另请参阅:
- https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
- https://developer.mozilla.org/en-US/docs/Web/API/URL
编辑
如果你必须使用正则表达式试试这个:
\/page(?=\?).*[?&]target=[^&\s]*(&|$)
解释:
\/page(?=\?)
- 匹配路径(以 /
开始,然后 page
然后向前看 ?
)
.*[?&]target=[^&\s]*($|&)
匹配参数名称 target
:
- 位于任何地方(前面有任何内容
.*
)
[?&]
前面有 ?
或 &
- 后跟它的值 (=[^&\s]*)
- 以参数结尾 (
$
) 或另一个参数 (&
) 结束
如果您正在寻找正则表达式,那么您可以使用:
/\/page\?(?:.*&)?target=[^&]*/i
正则表达式详细信息:
\/page\?
: 匹配文本 /page?
:
(?:.*&)?
:匹配可选后跟[=14=] 任意长度的文本
target=[^&]*
:匹配文本 target=
后跟 0 个或多个不是 &
的字符
我正在努力创建正则表达式来匹配 URL 路径和可能在任何地方的查询参数。
例如 URLs 可以是:
/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
target
此正则表达式仅适用于查找参数 \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'
然后在 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' {
# ...
}
另请参阅:
- https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
- https://developer.mozilla.org/en-US/docs/Web/API/URL
编辑
如果你必须使用正则表达式试试这个:
\/page(?=\?).*[?&]target=[^&\s]*(&|$)
解释:
\/page(?=\?)
- 匹配路径(以/
开始,然后page
然后向前看?
).*[?&]target=[^&\s]*($|&)
匹配参数名称target
:- 位于任何地方(前面有任何内容
.*
) [?&]
前面有?
或&
- 后跟它的值 (=[^&\s]*)
- 以参数结尾 (
$
) 或另一个参数 (&
) 结束
- 位于任何地方(前面有任何内容
如果您正在寻找正则表达式,那么您可以使用:
/\/page\?(?:.*&)?target=[^&]*/i
正则表达式详细信息:
\/page\?
: 匹配文本/page?
:(?:.*&)?
:匹配可选后跟[=14=] 任意长度的文本
target=[^&]*
:匹配文本target=
后跟 0 个或多个不是&
的字符