我正在寻找一个正则表达式,允许在URL方案中列出特定的顶级域名。我的大多数测试都通过了,除了那些重复的顶级域名:
正则表达式
^https:\/\/[^\/]+\.my-site\.com|cloud\/?.*?$
假阳性
https://qa.my-site.cloud.cloud/check-this-out?check-it-out=true
根据正则表达式,这显示为有效匹配。如何避免正则表达式匹配具有重复TLD的URL?添加组+ {1}
没有解决问题:^https:\/\/[^\/]+\.my-site\.(?:com|cloud){1}\/?.*?$
使用的语言为Javascript。
2条答案
按热度按时间smdncfj31#
有两个问题:
1.您需要将交替(
|
)括在括号中:(com|cloud)
而不是com|cloud
1.如果存在URL的路径,则
/
应为必填项下面是一个有效的正则表达式:
Try it.
z31licg02#
您可以使用肯定的lookaheadAssert来确保TLD在域中只出现一次:
说明:
^https:\/\/[^\/]+\.my-site\.
匹配字符串的开头"https://"以及直到". my-site "的所有内容。(?=com|cloud)
是一个肯定的前瞻Assert,确保TLD是"com"或"cloud"[^\/]*\/?
匹配域路径的其余部分,包括TLD,但不包括任何尾部斜杠(如果有).*?$
匹配URL的其余部分,包括任何查询参数请注意,TLD列在非捕获组(?:com)中|云),这意味着它们将被视为一个选项,不会捕获任何匹配的组。