我正在尝试将条目限制为特定格式。

如果条目具有5500或5100(例如01 \ 01-5500-000-00),那么我要具有以下内容:

^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-$

但是,如果条目中包含5500或5100以外的任何内容,我希望具有以下内容:
^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}$

如果有其他想法怎么办?

最佳答案

JavaScript regex引擎不支持条件regex语法,但可以与包含2个替代方案的非捕获组一起使用:

  • 具有积极的前瞻性和
  • 第二个带有相反的负向提前。

  • 此正则表达式符合您的条件,并且与JavaScript兼容:
    ^(?:(?=.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}-|(?!.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}-[0-9]{2})$
    

    参见regex demo

    让我分解一下:
  • ^-字符串
  • 的开头
  • (?:
  • (?=.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}--使用(?=.*\b5[15]00\b)进行前瞻的第一种选择,要求在字符串中包含整个单词55005100,并且第一个模式具有
  • |-交替运算符
  • (?!.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}-[0-9]{2})-第二个替代方案,其前面是(?!.*\b5[15]00\b)否定前瞻,可确保字符串内没有51005500,然后才与您的第二个模式匹配。
  • $-字符串结尾。
  • 08-20 02:03