【问题标题】:Finding out generalize method to get site name from it's website using Jquery找出使用 Jquery 从其网站获取站点名称的通用方法
【发布时间】:2016-07-26 15:33:44
【问题描述】:

我正在尝试使用 JQuery 在我的 chrome 扩展中使用任何网站的名称(只是一个没有任何子域名的域名)。在大多数情况下,我都能找到它。但我在少数极端情况下失败了。这是我到目前为止所做的。

host_url = window.location.hostname;

这只会给我主机名剥离页面 url、slug 或参数

   https://ap2.salesforce.com/_ui/core/chatter/ui/ChatterPage ->
   ap2.salesforce.com

   http://go.sap.com/support.html -> go.sap.com

   http://www.beaf.com/ -> beaf.com

http://www.digitalclicks.co.uk -> digitalclicks.co.uk

但是我怎样才能只获得域名,因为要删除子域,我可以拆分它并获得第二个元素,这会给我salesforce, sap, beaf

if (full_domain.split(".").length > 2){
    domain_name =  full_domain.split(".")[1]; // handle the subdomain ie. http://go.sap.com
  }else{
    domain_name =  full_domain.split(".")[0]; //for no subdomain www.beaf.com
  }

但是digitalclicks.co.uk 失败了,因为这里的域名是第一位的。我必须找到一种通用的方法来解决这个问题。 我怎样才能为所有顶级域做到这一点??

【问题讨论】:

  • 看起来你误解了什么是“顶级域”——它只是最右边的部分——在你的例子中它是“com”和“uk”,带有“co.uk”是二级域名。 en.wikipedia.org/wiki/List_of_Internet_top-level_domains
  • 就网址而言,您的示例中的 uk / com 是顶层,beaf / sap / salesforce / co 是第二级。因此,您的 digitalclicks 实际上是一个子域。只是一些二级域名是为/每个国家/地区的特定用途保留的。
  • 您可以通过从 host_url 中删除顶级域 / url 扩展名来获得它。(删除 .com、.co.uk 等)。现在字符串的最后一部分(由'.'分割)将是你想要的字符串
  • 这些站点是否只有.com.co.uk 站点?如果是,请使用此正则表达式:(\w+)(?=\.co\.uk|\.com)
  • 感谢@freedomn-m 的信息,不,@Druzion,我必须让它适用于网络上的所有网站(大部分)。并且可以有多个第一级和第二级域的组合,所以我必须让两个案例工作。 1) 如果现在是第二级域,则只需拆分并获得与go.sap.com 相同的结束元素 2) 如果存在第二级域,则拆分后的用户第一个元素。所以它应该适用于 co.uk、co.in、co.en 或任何其他组合(如果存在)。

标签: javascript regex url


【解决方案1】:

从任何 url 中提取域名。 http://www.域名.co.uk/sub1/sub2/...

它是这样工作的:

  1. 步骤:它摆脱了http(s)://
  2. 步骤:它摆脱了"/"背后的一切
  3. 创建一个由"."分割的数组
  4. 将数组的长度减少到 3 以去除 ".co.uk" f.e. 中的 "uk"
  5. 反转array,因为域名必须是[1]
    您必须这样做,因为网址可能类似于 domainname.com
    (没有子域)

编辑: 在第 1 行中,我们需要添加此 + "/" 以防 url 中没有斜杠。
但我们需要在下一步中使用斜杠来获取子字符串。

function getDomainName(url) {
  var _x = url.replace(/\w+:\s?\/\//.exec(url), "") + "/";
  var __x = _x.substring(0, _x.indexOf("/"));
  var __xRev = __x.split(".");
  if (__xRev.length > 3) {
    __xRev.pop();
  }
  __xRev.reverse();
  return __xRev[1];  // <-- __xRev[1] is the domainname
}

document.write(getDomainName(prompt("please enter url")));

【讨论】:

  • 我已经能够得到结果 ap2.salesforce.com go.sap.com beaf.com digitalclicks.co.uk 但我只想要 sap、digitalclicks、beaf、salseforce 程序化(如果那是一个词)。
  • 谢谢@John,让我快速检查一下。
  • @AkashShah 现在这应该适用于我认为的任何情况。
  • 嘿,谢谢@John,太好了。前一个有点依赖于我们提供的输入。这看起来很有希望,并且已经通过了我输入的所有前 8 个 URL 组合。做得好!!一旦我对我拥有的其他组合进行快速测试,就会接受答案。非常感谢朋友!!
  • 嘿@John,刚刚在我的应用程序中集成了代码并进行了一些测试。它就像一个魅力。非常感谢,道具的解释。正则表达式是要走的路。
猜你喜欢
  • 2010-12-11
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多