如何使用正则表达式从URL中仅提取顶级域名和二级域名?我想跳过所有较低级别的域名。有什么想法吗?
答案 0 :(得分:18)
这是我的想法,
使用$
锚从行末处匹配任何非点数的三次。
字符串末尾的最后一个匹配项应该是可选的,以允许.com.au
或.co.nz
类型的域名。
最后和最后一个匹配项只匹配2-3个字符,因此不会将其与二级域名混淆。
<强>正则表达式:强>
[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$
<强>演示:强>
答案 1 :(得分:6)
答案 2 :(得分:1)
对于任何使用JavaScript并希望以简单方式提取顶级和二级域名的人,我最终都这样做了:
'example.aus.com'.match(/\.\w{2,3}\b/g).join('')
这匹配任何一个句点,后跟两个或三个字符,然后是word boundary。
以下是一些示例输出:
'example.aus.com' // .aus.com
'example.austin.com' // .com
'example.aus.com/howdy' // .aus.com
'example.co.uk/howdy' // .co.uk
有些人可能需要更聪明的东西,但这对我来说对我的特定数据集来说已经足够了。
修改强>
我意识到实际上有不少的二级域名超过3个字符(并且允许)。所以,为了简单起见,我只删除了我的正则表达式的字符计数元素:
'example.aus.com'.match(/\.\w*\b/g).join('')
答案 3 :(得分:0)
使用捕获组可以获得一些魔法。
例如,请考虑以下javascript:
let hostname = 'test.something.else.be';
let domain = hostname.replace(/^.+\.([^\.]+\.[^\.]+)$/, '$1');
document.write(domain);
这将导致包含'else.com'
的字符串。这是因为正则表达式本身将匹配完整的字符串,捕获组将映射到$1
。因此,它将完整的字符串'test.something.else.com'
替换为实际为'$1'
的{{1}}。
正则表达式并不漂亮,可以使用'else.com'
之类的东西来定义更加动态,以定义要查找子域的深度级别,但这只是一个例子。
答案 4 :(得分:0)
如果需要所有特定的顶级域名,则可以编写如下正则表达式:
{
"DEV": [
{
"GitEmail": "asd@asd.com"
}
],
"TEST": [
{
"GitEmail": "asd1@asd.com"
}
],
"PROD": [
{
"GitEmail": "asd2@asd.com"
}
]
}
您还可以通过此链接添加更多域名:
答案 5 :(得分:0)
此外,您可能可以使用类似于以下内容的表达式来做到这一点
^(?:https?:\/\/)(?:w{3}\.)?.*?([^.\r\n\/]+\.)([^.\r\n\/]+\.[^.\r\n\/]{2,6}(?:\.[^.\r\n\/]{2,6})?).*$
并添加与捕获URL组成部分一样多的捕获组。
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
jex.im可视化正则表达式:
答案 6 :(得分:0)
以下正则表达式将一个域与一个从URL或域字符串中提取的root和tld(命名为捕获组)相匹配:
(?:\w+:\/{2})?(?<cs_domain>(?<cs_domain_sub>(?:[\w\-]+\.)*?)(?<cs_domain_root>[\w\-]+(?<cs_domain_tld>(?:\.\w{2})?(?:\.\w{2,3}|\.xn-+\w+|\.site|\.club))))\|
很难说它是否完美,但是它适用于我所针对的所有测试数据集,包括.club,.xn-1234,.co.uk和其他奇数结尾。而且它以5556个步骤针对40k个原木字符进行处理,因此效率似乎也很合理。
答案 7 :(得分:-2)
由于顶级域名现在包含超过三个字符的内容,例如.wang和.travel,这里有一个满足这些新顶级域名的正则表达式:
([^.\s]+\.[^.\s]+)$
策略:从字符串末尾开始,查找一个或多个不是句点或空格的字符,后跟一个句点,后跟一个或多个不是句点或空格的字符。
答案 8 :(得分:-2)
如果您需要更具体:
/\.(?:nl|se|no|es|milru|fr|es|uk|ca|de|jp|au|us|ch|it|io|org|com|net|int|edu|mil|arpa)/
基于http://www.seobythesea.com/2006/01/googles-most-popular-and-least-popular-top-level-domains/