如何使用正则表达式从URL中仅提取顶级域名和二级域名?我想跳过所有较低级别的域名。有任何想法吗?
如何使用正则表达式从URL中仅提取顶级域名和二级域名?我想跳过所有较低级别的域名。有任何想法吗?
这是我的想法,
使用。匹配从行尾开始的三次非点的任何内容 $
锚。
字符串末尾的最后一个匹配应该是可选的 .com.au
要么 .co.nz
域名类型。
最后和最后一个匹配项只匹配2-3个字符,因此不会将它与二级域名混淆。
正则表达式:
[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$
示范:
这是我的想法,
使用。匹配从行尾开始的三次非点的任何内容 $
锚。
字符串末尾的最后一个匹配应该是可选的 .com.au
要么 .co.nz
域名类型。
最后和最后一个匹配项只匹配2-3个字符,因此不会将它与二级域名混淆。
正则表达式:
[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$
示范:
对于任何使用JavaScript并希望以简单的方式提取顶级和二级域名的人,我最终这样做:
'example.aus.com'.match(/\.\w{2,3}\b/g).join('')
这匹配任何一个句点后跟两个或三个字符然后a 字边界。
这是一些示例输出:
'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('')
通过捕获组,您可以实现一些魔法。
例如,请考虑以下javascript:
let hostname = 'test.something.else.be';
let domain = hostname.replace(/^.+\.([^\.]+\.[^\.]+)$/, '$1');
document.write(domain);
这将导致包含的字符串 'else.com'
。这是因为正则表达式本身将匹配完整的字符串,捕获组将映射到 $1
。所以它取代了完整的字符串 'test.something.else.com'
同 '$1'
这实际上是 'else.com'
。
正则表达式并不漂亮,可以通过类似的东西变得更有活力 {3}
用于定义要查找子域的深度级别,但这只是一个例子。
如果您想要所有特定的顶级域名,那么您可以编写如下的正则表达式:
[RegularExpression("^(https?:\\/\\/)?(([\\w]+)?\\.?(\\w+\\.((za|zappos|zara|zero|zip|zippo|zm|zone|zuerich|zw))))\\/?$", ErrorMessage = "Is not a valid fully-qualified URL.")]
您还可以从此链接中输入更多域名:
由于TLD现在包含超过三个字符的内容,如.wang和.travel,这里有一个满足这些新TLD的正则表达式:
([^.\s]+\.[^.\s]+)$
策略:从字符串的末尾开始,查找一个或多个不是句点或空格的字符,后跟一个句点,后跟一个或多个不是句点或空格的字符。
如果你需要更具体:
/\.(?: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/