匹配 url 路径的正则表达式 - Golang 与 Gorilla Mux

Regex to match url path - Golang with Gorilla Mux

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

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

规则集:
我不是最擅长正则表达式的,但我创建了一个表达式,如果后面有 /,则之后需要 /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)而不是 (pattern) )

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

我能够从这个 SO 中得出我的工作表达式 post
Gorilla Mux 的文档在介绍部分 here

中解释如何使用该包时,稍微谈到了他们的正则表达式的工作原理

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

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

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