【问题标题】:Regex to find domain name without www [closed]正则表达式查找没有 www 的域名 [关闭]
【发布时间】:2013-06-29 22:33:03
【问题描述】:

我想得到不带www的域名

例如:https://www.gmail.com/anything 输出应为 gmail.com(或 .net 或 .org)

谁能帮我为此提供一个正则表达式?

【问题讨论】:

  • 你试过了吗?
  • 你尝试了什么? SO 不是代码生成器。
  • 我试过了,我的正则表达式是 (?

标签: javascript


【解决方案1】:

使用正则表达式,例如/(?:https?:\/\/)?(?:www\.)?(.*?)\//:

var str = "https://www.gmail.com/anything";
var match = str.match(/(?:https?:\/\/)?(?:www\.)?(.*?)\//);
console.log(match[match.length-1]); //gmail.com (last group of the match)

注意:这将获取 http/https 协议之后的所有内容,不包括 www - 直到第一个斜杠。

额外说明:很多域使用子域 - 因此mail.google.com 会突然变为google.com,因此不起作用。我的包括www 之外的每个子域分开

【讨论】:

  • 感谢它的工作,问题是我可能会或可能不会获得 https ex:我也可能会获得 www.gmail.com。那么我怎样才能改变它来工作呢?
  • @kittuss 通过使用问号。 https?:\/\/ 表示“字符串http,后跟可选的s,后跟://”。因此(https?:\/\/)? 表示前一个,但问号表示“重复 1 或 0 次”(因此它是可选的)。检查我更新的工作代码答案。当括号以?: 开头时,它是一个非捕获组,意思是“不要将此匹配项放入我们的匹配结果中”。
  • 非常感谢......这就像一个魅力!
  • 当我将此代码放入 jquery 的输入模糊函数中时,匹配变量为空。有什么问题? jsfiddle.net/b33kafq4
  • @sstauross 你需要在域之后有一些东西(它最后需要/)。 http://www.google.com = http:http://www.google.com/ = google.com.
【解决方案2】:

您可以使用<a> 来获取有关URL 的信息。例如:

var a = document.createElement("a");
a.href = "http://www.google.com";

您可以通过以下方式检索域:

var domain = a.hostname;

你可以去掉任何前导的“www”:

domain = domain.replace(/^www\./, "");

作为一个可重用的函数,你可以使用:

function getDomain(url) {
    var a, domain;

    a = document.createElement("a");
    a.href = url;

    domain = a.hostname;
    domain = domain.replace(/^www\./, "");

    return domain;
}

演示: http://jsfiddle.net/DuK6D/


More info/attributes about the HTMLAnchorElement JS object on MDN

【讨论】:

  • 喜欢这个。非常简单,有效且万无一失
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 2013-09-29
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
相关资源
最近更新 更多