需要 RegEx for URI 模板 (RFC 6570)

RegEx for URI Templates (RFC 6570) wanted

我需要验证一个字符串以确保它是有效的 URI Template according to RFC 6570应该用正则表达式就很容易了。但是,我没有找到 – 真的没有用于 URI 模板的 RegEx(还)吗?

上下文:我想在使用 node.js 处理的 JSON 模式中使用它。

我想您可能会在 library 中找到您想要的东西,它在 Java.

中实现了 RFC-6570
<dependency>
    <groupId>com.github.fge</groupId>
    <artifactId>uri-template</artifactId>
    <version>yourVersionHere</version>
</dependency>

如果解析过程中出现错误,URITemplate 构造函数将 return 一个 URITemplateParseException

final URITemplate template = new URITemplate("http://foo.bar/myPage{?map*}");

这里的聚会有点晚了,但由于唯一的答案没有解决 URI 模板的正则表达式问题,我决定尝试一下,因为我也找不到。这完全基于 Section 2 of RFC 6570 中的 ABNF 规则,我包含了一些 ASCII 艺术来映射不同的组件。

^([^\x00-\x20\x7f"'%<>\^`{|}]|%[0-9A-Fa-f]{2}|{[+#./;?&=,!@|]?((\w|%[0-9A-Fa-f]{2})(\.?(\w|%[0-9A-Fa-f]{2}))*(:[1-9]\d{0,3}|\*)?)(,((\w|%[0-9A-Fa-f]{2})(\.?(\w|%[0-9A-Fa-f]{2}))*(:[1-9]\d{0,3}|\*)?))*})*$
  \                            \_____________/ \____________/ \__________________/    \__________________/ /\________________/ /  \_________________________________________________________________/ //
   \                            pct-encoded /   \   operator    \     varchar                varchar       /  modifier-level4  /                               varspec                                //
    \______________________________________/     \               \________________________________________/                   /                                                                      //
                    literals                      \               \                varname                                    /                                                                      //
                                                   \               \_________________________________________________________/                                                                      //
                                                    \               \                        varspec                                                                                               //
                                                     \               \____________________________________________________________________________________________________________________________//
                                                      \                                                                   variable-list                                                           /
                                                       \_________________________________________________________________________________________________________________________________________/
                                                                                                                   expression

您可以在 regex101.com 上查看。这应该在 JSON 架构中工作,因为我使用的是 ECMA 语法。可能还可以进行一些简化,但正如我所说,这与 ABNF 一致,因此如果您熟悉规范,它应该 相对 容易理解。