regex 如何使用正则表达式验证子字符串[已关闭]

ee7vknir  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(110)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

昨天关门了。
Improve this question
我试图验证我的API头是否在PascalCase中,为此,我使用以下正则表达式:

^([A-Z][a-z]*)(-[A-Z0-9][a-z0-9]*)*$

我有一个用例,其中API包含一些PascalCase中没有的关键字,我必须在验证头时忽略这些关键字,例如:X-CUSAPI-Trace-Id使用上述正则表达式时,我希望忽略X-CUSAPI- part,然后对Trace-Id应用验证。我尝试使用以下正则表达式,但它不起作用。

^(?!.*X-CUSAPI-).([A-Z][a-z]*)(-[A-Z0-9][a-z0-9]*)*$

添加API规范示例:

{
        "in": "header",
        "name": "X-CUSAPI-Trace-Id",
        "description": "TraceID",
        "required": false,
        "schema": {
          "type": "string"
        }
      }

Spotlight spectral工具,帮助解析JSON并查找名称,以便应用正则表达式验证其是否为PascalCase:

header-should-pascal-case:
    message: "Request and Response HTTP Header should be pascal-case, separated by hyphens  Example: PascalCase-Header"
    description: SHOULD prefer hyphenated-pascal-case for HTTP header fields
    severity: error
    given: $.paths.*.*.parameters[?(@.in=='header')].name
    then:
      function: pattern
      functionOptions:
        match: ^.*?(?:X-CUSAPI-)?((?:[A-Z][a-z]+)+(?:-(?:[A-Z0-9][a-z0-9]+)+))\b
monwx1rj

monwx1rj1#

您所使用的正则表达式的问题是负前瞻Assert的位置不正确。您可以修改您的正则表达式,通过将负前瞻Assert放置在字符串锚(^)的开头来获得所需的结果,如下所示:
^(?!.X-CUSAPI-)([A-Z][a-z])(-[A-Z0-9][a-Z0-9])$
这将忽略任何包含“X-CUSAPI-”的字符串,然后使用PascalCase验证模式匹配剩余的字符串。

相关问题