【问题标题】:Regex to match url path - Golang with Gorilla Mux正则表达式匹配 url 路径 - Golang 与 Gorilla Mux
【发布时间】:2020-08-19 12:50:16
【问题描述】:

我正在设置一个 api 端点,在解析 url 后我会得到一个路径,例如 /profile/<username> e.g. /profile/markzuck

用户名是可选的,因为如果用户名为空,此端点将返回经过身份验证的用户配置文件

规则集:
我不是最擅长正则表达式,但如果有以下/,我创建了一个需要/profile 的表达式,例如/profile/ 那么你需要有一个与(\w){1,15} 匹配的<username>。另外,如果/ 后面还有另一个,我希望它可以匹配任意数量的组合,例如/profile/<username>/<if preceding "/" then anything else>

虽然我不能 100% 确定我的表达是否正确,但这似乎适用于 JavaScript
/^\/(profile)(\/(?=(\w){1,15}))?/

虽然 Gorilla Mux 不同,但它要求路由匹配字符串始终以斜杠和其他一些我不明白的东西开头,比如它只能使用非捕获组
(通过收到此错误发现这一点:panic: route /{_dummy:profile/([a-zA-Z_])?} 在其正则表达式中包含捕获组。只接受非捕获组:例如 (?:pattern)而不是(模式))

我尝试使用与 JavaScript 相同的表达式,但在这里不起作用。我创建了一个更宽容的表达式handlerFunc("/{_dummy:profile\/[a-zA-Z_].*}"),它确实有效,但这并不真正遵循我在我的 JavaScript 表达式中使用的相同规则集。

我能够从这篇 SO 帖子 here
中提出我的工作表达 Gorilla Mux 的文档在介绍部分 here

我的问题是,与我描述的规则集相似或等效的表达式在 Gorilla Mux HandlerFunc() 中有效吗?

【问题讨论】:

    标签: regex go gorilla


    【解决方案1】:

    如果您使用 mux 执行此操作,那么我相信您需要的不是正则表达式,而是多条路径。

    对于第一种情况,使用路径“/profile”。对于包含用户名的路径,请使用另一个路径“/profile/{userName}”。如果您真的想使用正则表达式,可以执行“/profile/{username:}”来验证用户名。如果您需要处理用户名之后的任何内容,请注册单独的路径 (/profile/{username}/otherstuff),或注册 pathPrefix "/profile/{username}/" 并手动处理 URL 的其余部分。

    【讨论】:

    • 我一直在做更多的研究,这似乎是正确的方法。我想我可以通过两个可能三个使用 mux PathPrefix("/profile") 的路由并在子路由中使用正则表达式来匹配有效的用户名来获得所需的结果。经过一些测试并得到正确结果后,将接受您的答案。
    • 这行得通 profilePrefix := router.PathPrefix("/profile") profilePrefix.Path(`/{username:\w+}`) 我可以用 {1,15} 替换 + 因为用户名只能是 15 个字符长?
    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 2015-05-11
    • 2022-08-11
    • 2015-07-10
    • 2020-09-30
    • 2011-11-19
    • 1970-01-01
    • 2014-08-23
    相关资源
    最近更新 更多