没有前导零的儒略日正则表达式

Julian Day Regex Without Leading Zeros

我真的很难为儒略日创建一个不允许前导零的 Reg Ex。

我使用它来使用 JavaScript Reg Ex 进行输入验证。它需要匹配 1 到 366。

示例匹配:

匹配失败示例:

我在 regex101 上试过这个:

^[1-9]|[1-9][0-9]|[1-3][0-5][0-9]|36[0-6]$

但是我没有把可选部件弄好。所以当我输入 266 时,我得到了 2 和 66 的匹配。(这个问题正在转化为我的 input validation control。)

我想尝试使用 + 作为一个或多个,但我需要不允许前导零,所以这行不通。

我已经阅读了 guidance 关于提出 RegEx 问题的内容并尝试遵循它,但如果我遗漏了什么,请告诉我,我会更新我的问题。

主要问题有两个:1) 应将备选方案分组,以便 ^$ 锚点可以应用于所有备选方案,2) [1-3][0-5][0-9] 部分没有匹配 160199260299,这部分应该被分成两个单独的分支,[12][0-9]{2}|3[0-5][0-9].

您可以使用

^(?:[1-9]|[1-9][0-9]|[12][0-9]{2}|3[0-5][0-9]|36[0-6])$

参见regex demo

详情

  • ^ - 字符串开头
  • (?: - 备选方案组:
    • [1-9] - 1 到 9
    • | - 或
    • [1-9][0-9] - 1099
    • | - 或
    • [12][0-9]{2} - 100299
    • | - 或
    • 3[0-5][0-9] - 300359
    • | - 或
    • 36[0-6] - 360366
  • ) - 交替组结束
  • $ - 和字符串的结尾。