我正在尝试使用正则表达式获取以下条件逻辑。
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 网站上的测试。
最佳答案
(?=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/