负先行短路问题 (REGEX) - 查找格式错误的字符串

Problems with negative lookahead shotcircuiting (REGEX) - Finding faulty formated strings

已编辑以使问题更清楚

我想出了以下正则表达式来帮助我找到 >(0[1-9]|1[0-2])\-\d{4}:\d+(,\d{1,2})?< 形式的表达式,我现在想做的是找出我的文本是否包含格式不正确的类似表达式,即是符合正则表达式第一部分(冒号之前)但不遵循指定数字格式的表达式,例如匹配 >01-2018:a<>01-2018:12,<>01-2018:12,111<

我使用负前瞻尝试了以下 >(0[1-9]|1[0-2])\-\d{4}:(?!\d+(,\d{1,2})?).*<

我的解决方案的问题当然是可以说它会短路,这会让我在 ie 上出现负匹配。 >01-2018:12,< 因为它匹配“12”部分。我不确定如何进行。

您可以使用

/>(?:0[1-9]|1[0-2])-\d{4}:(?!\d+(?:,\d{1,2})?<)[^<]*</

regex demo

详情

  • > - 一个 > 字符
  • (?:0[1-9]|1[0-2]) - 月份数,0112
  • - - 连字符(无需转义)
  • \d{4} - 任意 4 位数字
  • : - 冒号
  • (?!\d+(?:,\d{1,2})?<) - 如果在当前位置的右边没有
    • \d+ - 1 个或多个数字
    • (?:,\d{1,2})? - 可选的非捕获组匹配 1 次或 0 次 , 后跟 1 或 2 个数字
    • < - 一个 < 字符
  • [^<]* - 重要! - 这会消耗除 < 以外的任何 0+ 个字符才能到达第一个...
  • < - < 字符。