Javascript条件正则表达式if-then-else
我试图将条目限制为特定的格式 如果条目有5500或5100,如01\01-5500-000-00,则我希望有:Javascript条件正则表达式if-then-else,javascript,regex,ecmascript-5,Javascript,Regex,Ecmascript 5,我试图将条目限制为特定的格式 如果条目有5500或5100,如01\01-5500-000-00,则我希望有: ^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-$ ^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}$ 但如果条目中有5500或5100以外的内容,我希望有以下内容: ^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-$ ^[0-9]{2,}\\[0-9]{2
^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-$
^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}$
但如果条目中有5500或5100以外的内容,我希望有以下内容:
^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-$
^[0-9]{2,}\\[0-9]{2}\-[0-9]{4}\-[0-9]{3}\-[0-9]{2}$
使用if-then-else思想如何实现这一点?使用条件句,例如: (?(?=regex)然后| else):
[0-9]{2,}\\[0-9]{2}-(?(?=5[15]00[0-9]{4}-[0-9]{3}-[0-9]{4}-[0-9]{3}-[0-9]{9}-[0-9]{2}
正则表达式条件示例:
如果您使用的是非基于PCRE的正则表达式引擎,则可以通过执行以下操作来模拟该功能:
((?=positive-regex-statement)then|(?!negavite-regex-statement)then)
例如
模拟正则表达式条件示例:JavaScript正则表达式引擎不支持条件正则表达式语法,但可以使用包含2个可选项的非捕获组进行处理:
^(?:(?=.*\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})$
看
让我把它分解一下:
-字符串的开头^
(?:
-第一个选择是(?=.*\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
-字符串结束$
[0-9]{4}
:
/^\d{2,}\\\d{2}-(?:5[15]00-\d{3}-|(?!5[15]00)\d{4}-\d{3}-\d{2})$/
与JavaScript中的[0-9]
是一样的\d
- 对于else部分,使用
来保证它不是5100/5500(?!5[15]00)\d{4}
^[0-9]{2,}\\[0-9]{2}-5[15]00-[0-9]{3}-${124; ^[0-9]{2,}\\\[0-9]{2}-(?!5[15]00)[0-9]{4}-[0-9]{3}-[0-9]{2}$
我曾经帮助我正确地创建这个表达式。我试着使用括号中带5500的管道:(?=.*5500)^[0-9]{2,}\[0-9]{2}-[0-9]{4}-[0-9]{3}-[0-9]{2}$-不正确,正如我所见,该工具只支持JS。但是仍然有可能。顺便说一下,01\01-5500-000-00
与您的第一个模式不匹配。它应该失败吗?另外,第一个模式中的尾随的“-”
是故意的吗?@user974061:您能告诉我您在这个正则表达式中使用的编程语言是什么吗?(这些条件仅由类似PCRE的引擎支持)。@Houseman:你真的读了整篇文章,还是只是无缘无故地投了反对票?我为非基于PCRE的引擎(也包括Javascript)提供了一个答案。感谢您的修复,@Revo,我有点困惑。