Javascript条件正则表达式if-then-else

use*_*061 11 javascript regex ecmascript-5

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

如果条目有5500或5100,如01\01-5500-000-00那么我想要这个:

^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-$
Run Code Online (Sandbox Code Playgroud)

但如果条目有除5500或5100以外的任何东西我想要这个:

^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}$
Run Code Online (Sandbox Code Playgroud)

如何通过if then else想法实现这一目标?

Wik*_*żew 14

JavaScript正则表达式引擎不支持条件正则表达式语法,但它可以与包含2个备选方案的非捕获组一起使用:

  1. 一个有积极的前瞻和

  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})$
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

让我分解一下:

  • ^ - 字符串开头
  • (?:
    • (?=.*\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)负向前瞻,确保字符串中没有5100或没有5500内部,然后才匹配您的第二个模式.
  • $ - 字符串结尾.