使用正则表达式从URL中提取顶级域和二级域

mel*_*mel 14 regex dns url

如何使用正则表达式从URL中仅提取顶级域名和二级域名?我想跳过所有较低级别的域名.有任何想法吗?

Vas*_*kis 19

这是我的想法,

使用$锚点从行尾开始匹配任何非点,三次的内容.

字符串末尾的最后一个匹配应该是可选的,以允许.com.au.co.nz类型的域.

最后和最后一个匹配项只匹配2-3个字符,因此不会将它与二级域名混淆.


正则表达式:

[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$


示范:

Regex101示例


bra*_*ipt 7

你可以用这个:

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'
Run Code Online (Sandbox Code Playgroud)

如果没有更多细节(样本文件,您正在使用的语言),很难确切地知道这是否有效.

示例:http://regex101.com/r/wD8eP2