我正在尝试将条目限制为特定格式。
如果条目具有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)
进行前瞻的第一种选择,要求在字符串中包含整个单词5500
或5100
,并且第一个模式具有|
-交替运算符(?!.*\b5[15]00\b)[0-9]{2,}\\[0-9]{2}-[0-9]{4}-[0-9]{3}-[0-9]{2})
-第二个替代方案,其前面是(?!.*\b5[15]00\b)
否定前瞻,可确保字符串内没有5100
或5500
,然后才与您的第二个模式匹配。 $
-字符串结尾。