【问题标题】:how to Extract hostname from url using jquery [duplicate]如何使用jquery从url中提取主机名[重复]
【发布时间】:2015-04-19 06:01:30
【问题描述】:

这里是 URL 示例。

1) domain.com/our-work/insights/tips-and-advice/2008/02/04/the-path-to-good-design-is-proper-analytics
2) subdomain.domain.com
3) im.domain.com/About.htm
4) domain.uk/help.htm

得到这样的结果

domain.com
domain.uk

【问题讨论】:

  • 我认为使用regex 可以很简单地完成。另外,到目前为止,您尝试过什么?

标签: javascript jquery regex url


【解决方案1】:

为此,您可以简单地使用String.prototype.split() 方法和/ 作为分隔符来提取主机名,然后使用String.prototype.match() 取主机名的结尾(包含一个点):

var m = url.split('/')[0].match(/[^.]+\.[^.]+$/);
if (m)
    var domain = m[0];

注意:如果 url 以 scheme 开头,你需要在之前删除它:

var pat = '^https?://';
url = url.replace(new RegExp(pat, 'i'), '');

另一种方法是直接查找域:

var pat = '^(?:https?://)?(?:[^/:]*:[^/@]*@)?[^/]*([^./]+\\.[^./]+)';
var m = url.match(new RegExp(pat, 'i'));
if (m)
    var domain = m[1];

但在这种情况下,您需要在主机名之前处理可能的登录/密码部分。这就是这个子模式的原因:(?:[^/:]*:[^/@]*@)?

【讨论】:

  • 它没有给出预期的结果。
  • @Musakkhir:确切地说,我读得太快了!域名总是只有一个点吗?
  • 域名中总会有一个点,上述模式不适用于这些网址。
【解决方案2】:

您可以通过

获取主机名
window.location.hostname

Manual

【讨论】:

  • OP 想要获取 url 字符串的主机名,而不是页面的 url。 Vivek 的解决方案是正确的。
【解决方案3】:

我认为这个正则表达式(如果你想使用正则表达式)可以完成这项工作:

\w+\.(?=(com|uk))

演示here.

【讨论】:

    【解决方案4】:

    试试这个。

    你可以通过javascript函数来实现这个功能。

    var name = document.domain;
    

    你想从子域中找出域名而不是使用这个。

    var parts = location.hostname.split('.');
    var subdomain = parts.shift();
    var upperleveldomain = parts.join('.');
    var sndleveldomain = parts.slice(-2).join('.');
    alert(sndleveldomain);
    

    【讨论】:

    • 以上url都是字符串。
    • 那么你想要哪种数据类型?
    • location.hostname 仅适用于当前域。我想要所有字符串形式的 url 的预期结果。
    • 那么你在这个答案中遇到了什么问题?
    猜你喜欢
    • 2018-05-31
    • 2021-01-28
    • 1970-01-01
    • 2015-01-09
    • 2010-11-21
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多