我正在尝试使用正则表达式获得以下条件逻辑。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
$
- 字符串末尾。
添加回答
举报
0/150
提交
取消