为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式中的条件逻辑

正则表达式中的条件逻辑

泛舟湖上清波郎朗 2023-11-12 15:08:19
我正在尝试使用正则表达式获得以下条件逻辑。if (text starts with +61) {  if (text after +61 is 1800) {    // then match 6 digits after 1800. So, the regex until here should be +611800 and then 6 digits  } else {    // match 9 digits after +61  }}我阅读了如何编写条件正则表达式。但是,我被下面的正则表达式困住了^\+61((?=1800)\d{6}|\d{9})$上面的正则表达式失败了,但它必须成功+611800123456(这必须成功)以下文本通过了正则表达式测试,但它必须失败+61180012345(这必须失败)这是我在 regexr 网站中的测试。https://regexr.com/5ia2e
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

(?=1800)\d{6}模式意味着与 匹配的前四位数字\d{6}必须是1800,而您想要匹配子1800字符串后的任意六位数字。这意味着,您需要将非消费模式“转换”(?=1800)为消费1800模式。

另请注意,\d{9}第二个替代方案将匹配任何九个数字,而您只想匹配不以 开头的数字1800。您需要在第二个替代方案前面添加一个(?!1800)负的前瞻模式。不幸的是,JavaScript RegExp 不支持条件构造,在 PCRE、.NET 等中您可以使用 ^\+61(?(?=1800)1800\d{6}|\d{9})$,但在本例中不行。

在这里,您可以使用

^\+61(?:1800\d{6}|(?!1800)\d{9})$

请参阅正则表达式演示

细节

  • ^- 字符串的开头

  • \+61-+61子串

  • (?:1800\d{6}|(?!1800)\d{9})- 匹配的非捕获组

    • 1800\d{6} -1800子字符串,然后是任意六位数字

    • |- 或者

    • (?!1800)\d{9}- 任何不以以下字符开头的九位数字1800

  • $- 字符串末尾。


查看完整回答
反对 回复 2023-11-12
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信