正则表达式从域字符串中获取 SLD + TLD

Posted

技术标签:

【中文标题】正则表达式从域字符串中获取 SLD + TLD【英文标题】:Regex to get SLD + TLD from domain string 【发布时间】:2015-07-28 20:52:47 【问题描述】:

我有一个将域名作为参数的函数,但域必须采用xxx.com 的格式。例如http://subdomain.example.com 必须作为 example.com 传递给函数。

我已经编写了以下正则表达式,但它只返回 TLD (.com)。我是一个正则表达式的新手,所以真的看不出我哪里出错了......第一个语句是从domain 中提取http://,第二个语句应该提取任何子域。

var domain = req.query.domain.replace(/.*?:\/\//g, '').replace(/^[^.]+\./g, '');

使用上述正则表达式,http://example.com 变为 com

【问题讨论】:

【参考方案1】:

我认为直接匹配模式比匹配并删除它的补码更容易。我会使用模式/[^./]+\.[^./]+$/。这匹配在字符串末尾用句点分隔的两个非特殊字符运行。

alert('http://subdomain.example.com'.match(/[^./]+\.[^./]+$/)[0]);
alert('http://example.com'.match(/[^./]+\.[^./]+$/)[0]);

【讨论】:

【参考方案2】:

一个更简单的答案是使用document.createElement 显示的技巧here

要获取主机名和 TLD,您只需编写

var link = document.createElement('a');
link.href = req.query.domain;

var formattedDomain = link.hostname; //yay

【讨论】:

这是节点,因此document 不可用。 包含这些信息会很有帮助。

以上是关于正则表达式从域字符串中获取 SLD + TLD的主要内容,如果未能解决你的问题,请参考以下文章

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

java正则表达式如何获取字符串中所有匹配内容

JS如何用正则表达式 获取字符串内的匹配部份?

js正则获取字符串中所有图片名称

使用正则表达式从字符串中获取数字对

js 正则表达式获取小括号内的内容,不含括号