【问题标题】:How to get site name from string in url? [duplicate]如何从 url 中的字符串中获取站点名称? [复制]
【发布时间】:2019-07-13 04:49:52
【问题描述】:

我不知道如何去掉所有内容,只保留网站名称。

所以给定:

var url = "https://www.example.it/wp-json/wp/v2/posts?per_page=50&status=publish";

如何获得“example”?

不熟悉正则表达式。

【问题讨论】:

  • 查看location.hostlocation.hostname,去掉域名后缀
  • @Turnip 是的,我看过那个答案,但它使用主机并且不只给我名字stackoverflow.com/a/6944772/1018804
  • @Taplar 根据另一条评论,我已经按照 stackoverflow.com/a/6944772/1018804 查看了主机,但我无法弄清楚如何只获取实际名称而不是万维网
  • @rob.m 阅读已接受答案的第二部分。然后阅读第二个最受好评的答案。
  • @Taplar 我没有,否则我不会问

标签: javascript jquery


【解决方案1】:

检查 URL 对象:https://developer.mozilla.org/en-US/docs/Web/API/URL

var address = "https://www.example.it/wp-json/wp/v2/posts?per_page=50&status=publish";
var url = new URL(address);
var hostname = url.hostname;
var hostTokens = hostname.split('\.');

console.log(hostTokens[1]); // example

console.log({
  hash         : url.hash,
  host         : url.host,
  hostname     : url.hostname,
  href         : url.href,
  origin       : url.origin,
  password     : url.password,
  pathname     : url.pathname,
  port         : url.port,
  protocol     : url.protocol,
  search       : url.search,
  username     : url.username
});
.as-console-wrapper { top: 0; max-height: 100% !important; }

如果需要支持子域,可以修改如下函数。

var addresses = [ 'https://www.example.it', 'https://mail.example.it' ];

addresses.forEach(address => console.log(parseDomain(address)));

function parseDomain(address) {
  var url = new URL(address);
  var hostTokens = url.hostname.split('\.');
  var result = {
    'Domain' : hostTokens[hostTokens.length - 2],
    'Top-Level Domain' : hostTokens[hostTokens.length - 1]
  };
  if (hostTokens.length > 2 && hostTokens[0] !== 'www') {
    result['Sub-Domain'] = hostTokens[0];
  }
  return result;
}
.as-console-wrapper { top: 0; max-height: 100% !important; }

【讨论】:

  • 好吧,我说的对吗?基本上这一行 var hostTokens = hostname.split('\.');说摆脱点前后的一切?
  • 正如其他人指出的那样,像 www.example.subdomain.com 这样的子域怎么样?
  • 不,这意味着用点分隔字符串。你会得到数组:['www', 'example', 'it']
  • @rob.m 在你的情况下,你没有要求一些花哨的厨房水槽。如果您需要示例部分,请获取主机名,拆分它,然后获取第二个令牌。
  • @rob.m 在第二个示例中,您可以向后工作以获取相关部分。
【解决方案2】:

试试这个;

function getSiteName() {
  const fullUrlSplit = window.location.host.split(".");
  if (fullUrlSplit[0] !== "www")
    return fullUrlSplit[0];
  return fullUrlSplit[1];   
}

只要没有子域,这将起作用。

【讨论】:

    【解决方案3】:

    不使用regex,使用URLsplit()的组合可以得到,主机名会返回www.example.com,所以如果我们在其上应用.split('.'),然后它将返回一个数组['www','example','com'],使用[1] 我只采用示例部分,希望它有所帮助:)

    var url = "https://www.example.it/wp-json/wp/v2/posts?per_page=50&status=publish";
    var domain = (new URL(url)).hostname.split('.')[1]
    console.log(domain)

    对于子域捕获

    var url = "https://www.abc.example.it/wp-json/wp/v2/posts?per_page=50&status=publish";
    var subdomain = (new URL(url)).hostname.split('.')[1];
    var domain = (new URL(url)).hostname.split('.')[2];
    console.log(subdomain, domain)

    【讨论】:

    • 我明白了,所以使用主机名你只能得到 www.example.com,然后基本上说 get of all dots,你能解释一下 [1] 的作用吗?
    • 请注意,这不适用于包含子域的 url,因为拆分将发生在子域之后,而不是主机名之后。
    • @rob.m, [1] 正在访问 .split 返回的数组的第二个索引。请记住,数组索引从 0 开始,而不是 1。数组看起来像这样:[0] => 'www', [1] => 'example', [2] => 'com'
    • @rob.m 编辑 再次 mate :) 祝你好运
    • 太棒了!非常感谢
    猜你喜欢
    • 1970-01-01
    • 2013-03-03
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2012-08-30
    • 2012-03-17
    相关资源
    最近更新 更多