需要RegEx for URI模板(RFC 6570)

时间:2015-04-07 14:53:35

标签: javascript regex jsonschema uritemplate

我需要验证字符串以确保它是有效的URI Template according to RFC 6570。使用正则表达式,应该非常简单。但是,我没有找到一个 - 是否真的没有针对URI模板的RegEx(还)?

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

2 个答案:

答案 0 :(得分:0)

我认为您可以使用在Java中实现RFC-6570的library找到您想要的内容。

<dependency>
    <groupId>com.github.fge</groupId>
    <artifactId>uri-template</artifactId>
    <version>yourVersionHere</version>
</dependency>

如果在解析过程中出错,URITemplate构造函数将返回URITemplateParseException

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

答案 1 :(得分:0)

在这里参加聚会有点晚了,但是由于唯一的答案不能解决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上签出。由于我使用的是ECMA语法,因此这应该可以在JSON模式中使用。也许还可以进行一些简化,但是正如我说的那样,这与ABNF保持一致,因此,如果您熟悉该规范,应该相对易于理解。