Regex:允许列出URL顶级域

wmvff8tz  于 2023-02-25  发布在  其他
关注(0)|答案(2)|浏览(110)

我正在寻找一个正则表达式,允许在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。

smdncfj3

smdncfj31#

有两个问题:
1.您需要将交替(|)括在括号中:(com|cloud)而不是com|cloud
1.如果存在URL的路径,则/应为必填项
下面是一个有效的正则表达式:

^https:\/\/[^\/]+\.my-site\.(com|cloud)(\/.*?)?$

Try it.

z31licg0

z31licg02#

您可以使用肯定的lookaheadAssert来确保TLD在域中只出现一次:

^https:\/\/[^\/]+\.my-site\.(?=com|cloud)[^\/]*\/?.*?$

说明:

  • ^https:\/\/[^\/]+\.my-site\.匹配字符串的开头"https://"以及直到". my-site "的所有内容。
  • (?=com|cloud)是一个肯定的前瞻Assert,确保TLD是"com"或"cloud"
  • [^\/]*\/?匹配域路径的其余部分,包括TLD,但不包括任何尾部斜杠(如果有)
  • .*?$匹配URL的其余部分,包括任何查询参数

请注意,TLD列在非捕获组(?:com)中|云),这意味着它们将被视为一个选项,不会捕获任何匹配的组。

相关问题