正则表达式中的条件逻辑

我正在尝试使用正则表达式获得以下条件逻辑。


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


泛舟湖上清波郎朗
浏览 104回答 1
1回答

森栏

该(?=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$- 字符串末尾。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript