如何在JavaScript中提取URL的主机名部分

453

有没有一种非常简单的方法可以从完整的URL开始:

document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"

提取目标是仅包含主机部分:

aaa.bbb.ccc.com

肯定有一个可靠的JavaScript函数可以做到这一点,但我找不到它。

15个回答

3

我有一个在StackOverflow回答中没有看到过的技巧:

使用图像的“src”属性可以得到您网站的完整基础路径。

例如:

var dummy = new Image;
dummy.src = '$';                  // using '' will fail on some browsers
var root = dummy.src.slice(0,-1); // remove trailing '$'

在类似于http://domain.com/somesite/index.html的URL中,root将被设置为http://domain.com/somesite/。这也适用于本地主机或任何有效的基本URL。
请注意,这将导致$虚拟图像的HTTP请求失败。您可以改用现有的图像来避免这种情况,只需进行轻微的代码更改即可。
另一种变体使用虚拟链接,在HTTP请求上没有副作用:
var dummy = document.createElement ('a');
dummy.href = '';
var root = dummy.href;

虽然我没有在每种浏览器上进行测试。


2
我希望澄清一些事情。如果有人想要获取包含路径的完整URL,就像我需要的那样,可以使用以下代码:
var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;

为什么要走更长的路呢?可以使用 var fullUrl = window.location.origin + window.location.pathname 来获取。 - Anant
但有时您想在协议和主机名之间添加类似子域的内容,例如多语言等。 - mcanvar

1

正则表达式提供了更多的灵活性。

    //document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah
    //1.
     var r = new RegExp(/http:\/\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com

    //2. 
     var r = new RegExp(/http:\/\/[^/]+\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com/asdf

0

我的解决方案适用于包括微软Internet Explorer在内的所有网络浏览器,且不使用任何正则表达式,其灵感来自Noah Cardoza和Martin Konecny的解决方案:

function getHostname(href) {
    if (typeof URL === 'object') {
        // workaround for MS IE 11 (Noah Cardoza's solution but without using Object.assign())
        var dummyNode = document.createElement('a');
        dummyNode.href = href;
        return dummyNode.hostname;
    } else {
        // Martin Konecny's solution
        return new URL(href).hostname;
    }
}

-1

您可以使用/拆分URL字符串

const exampleURL = "Https://exampleurl.com/page1/etc/etc"
const URLsplit = exampleURL.split("/")
console.log(URLsplit)
console.log(URLsplit[2])

结果。exampleurl.com


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接