如何使用正则表达式从URL中仅提取顶级和二级域名?我想跳过所有较低级别的域。有什么想法吗?
发布于 2014-01-17 06:41:56
这是我的主意,
使用$锚点从行尾开始三次匹配任何不是点的内容。
字符串末尾的最后一个匹配项应该是可选的,以支持.com.au或.co.nz类型的域。
最后一个匹配和倒数第二个匹配都只匹配2-3个字符,所以它不会与二级域名混淆。
正则表达式:
[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$
Demonstration:
发布于 2014-01-17 06:01:18
2019年更新
这是一个古老的问题,随着我们开始添加新的虚荣old和更多的ccTLD二级域名(例如.co.uk,.org.uk),这里的挑战要复杂得多。如此之多,以至于一个正则表达式几乎肯定会返回假阳性或假阴性。
可靠地获取主要主机的唯一方法是调用一个知道它们的服务,比如Public Suffix List。
有几个开源库可以使用,比如psl,也可以编写自己的开源库。
psl的用法非常直观。从他们的文档中:
var psl = require('psl');
// Parse domain without subdomain
var parsed = psl.parse('google.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'google'
console.log(parsed.domain); // 'google.com'
console.log(parsed.subdomain); // null
// Parse domain with subdomain
var parsed = psl.parse('www.google.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'google'
console.log(parsed.domain); // 'google.com'
console.log(parsed.subdomain); // 'www'
// Parse domain with nested subdomains
var parsed = psl.parse('a.b.c.d.foo.com');
console.log(parsed.tld); // 'com'
console.log(parsed.sld); // 'foo'
console.log(parsed.domain); // 'foo.com'
console.log(parsed.subdomain); // 'a.b.c.d'旧答案
您可以使用以下代码:
(\w+\.\w+)$如果没有更多的细节(示例文件,您正在使用的语言),就很难准确地辨别出这是否可以工作。
示例:http://regex101.com/r/wD8eP2
发布于 2017-10-25 21:13:37
对于任何使用JavaScript并想要一种简单的方法来提取顶级和二级域名的人,我最终这样做了:
'example.aus.com'.match(/\.\w{2,3}\b/g).join('')它匹配句点后跟两个或三个字符,然后是word boundary的任何内容。
以下是一些示例输出:
'example.aus.com' // .aus.com
'example.austin.com' // .austin.com
'example.aus.com/howdy' // .aus.com
'example.co.uk/howdy' // .co.uk有些人可能需要一些更聪明的东西,但对于我的特定数据集来说,这已经足够了。
编辑
我已经意识到实际上有相当多的二级域名超过3个字符(并且允许)。因此,为了简单起见,我只删除了regex中的字符计数元素:
'example.aus.com'.match(/\.\w*\b/g).join('')https://stackoverflow.com/questions/21173734
复制相似问题