javascript - 正则表达式中的条件逻辑

标签 javascript regex

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

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

最佳答案

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

另请注意,\d{9} 第二种选择将匹配任意九位数字,而您只想匹配它们不是以 1800 开头的数字。您需要在第二个备选方案前添加一个 (?!1800) 否定先行模式。不幸的是,JavaScript RegExp 不支持 条件构造,在 PCRE、.NET 等中你 could use ^\+61(?(?=1800)1800\d{6}|\d{9})$,但在这种情况下不是。

在这里,你可以使用

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

参见 regex demo .

详情

  • ^ - 字符串的开始
  • \+61 - +61 子串
  • (?:1800\d{6}|(?!1800)\d{9}) - 非捕获组匹配
    • 1800\d{6} - 1800 子字符串,然后是任意六位数字
    • | - 或者
    • (?!1800)\d{9} - 不以 1800
    • 开头的任意九位数字
  • $ - 字符串结尾。

关于javascript - 正则表达式中的条件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65251156/

相关文章:

javascript - 正则表达式完全匹配数字,而不是数字

regex - 带正则表达式的数字范围

javascript - 从输入中删除重复的空格

javascript - 点击ajax中的链接不起作用

javascript - onchange =""在选择标签中不起作用

在 C 中转换转义序列

Javascript - 使用字符串连接设置变量

php - 转换坐标可用

regex - 日志中日期范围之间的 grep

c# - 正则表达式匹配有效的十六进制字符串但不是全部 '0'