获取部分URL路径

使用JavaScript从URL中提取路径的正确方法是什么?

< p >例子:< br > URL
http://www.somedomain.com/account/search?filter=a#top < br > 但我只是想让这部分
/账户/搜索< / em >

我使用jQuery,如果有任何东西可以利用。

280195 次浏览

内置window.location对象的一个属性将为当前窗口提供该属性。

// If URL is http://www.somedomain.com/account/search?filter=a#top


window.location.pathname // /account/search


// For reference:


window.location.host     // www.somedomain.com (includes port if there is one)
window.location.hostname // www.somedomain.com
window.location.hash     // #top
window.location.href     // http://www.somedomain.com/account/search?filter=a#top
window.location.port     // (empty string)
window.location.protocol // http:
window.location.search   // ?filter=a


更新,对任何URL使用相同的属性:

事实证明,这个模式被标准化为一个名为< >强URLUtils < / >强的接口,你猜怎么着?现有的window.location对象以及锚定元素都实现了接口。

所以你可以使用相同的属性上面的任何 URL -用URL创建一个锚并访问属性:

var el = document.createElement('a');
el.href = "http://www.somedomain.com/account/search?filter=a#top";


el.host        // www.somedomain.com (includes port if there is one[1])
el.hostname    // www.somedomain.com
el.hash        // #top
el.href        // http://www.somedomain.com/account/search?filter=a#top
el.pathname    // /account/search
el.port        // (port if there is one[1])
el.protocol    // http:
el.search      // ?filter=a

[1]:浏览器对包含port的属性的支持不一致,参见:http://jessepollak.me/chrome-was-wrong-ie-was-right

这在最新版本的Chrome和Firefox中都有效。我没有可供测试的Internet Explorer版本,所以请使用JSFiddle示例进行测试。

JSFiddle的例子 .

还有一个即将到来的URL对象将为url本身提供这种支持,而不需要锚定元素。看起来目前还没有稳定的浏览器支持它,但据说它将在Firefox 26中推出。当你认为你可能支持它时,试试这里

window.location.href.split('/');

将为您提供一个包含所有URL部分的数组,您可以像正常数组一样访问它。

或者@Dylan提出了一个更优雅的解决方案,只有路径部分:

window.location.pathname.split('/');

如果这是当前的 url,则使用window.location.pathname,否则使用正则表达式:

var reg = /.+?:\/\/.+?(\/.+?)(?:#|\?|$)/;
var pathname = reg.exec( 'http://www.somedomain.com/account/search?filter=a#top' )[1];

如果你想获取你已经存储在变量中的URL的部分,我可以推荐URL-Parse

const Url = require('url-parse');
const url = new Url('https://github.com/foo/bar');

根据文档内容,抽取了以下几个部分:

返回的url实例包含以下属性:

protocol: URL的协议方案(如http:)。 slashes:布尔值,表示协议后面是否有两个正斜杠(//)。 auth:认证信息部分,如用户名:密码。 username:基本认证用户名。 password:基本鉴权密码。 host:带端口号的主机名。 hostname:不带端口号的主机名。 port:可选端口号。 pathname: URL路径。 query:包含查询字符串的已解析对象,除非将parsing设置为false。 散列:URL的“片段”部分,包括磅号(#)。 href:完整的URL。 origin: URL的来源

如果你有一个抽象的URL字符串(不是来自当前的window.location),你可以使用这个技巧:

let yourUrlString = "http://example.com:3000/pathname/?search=test#hash";


let parser = document.createElement('a');
parser.href = yourUrlString;


parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.search;   // => "?search=test"
parser.hash;     // => "#hash"
parser.host;     // => "example.com:3000"

感谢jlong

有一个有用的Web API方法叫做URL

const url = new URL('https://www.somedomain.com/account/search?filter=a#top');
console.log(url.pathname.split('/').slice(1)); // drop the leading slash
const params = new URLSearchParams(url.search)
console.log("filter:",params.get("filter"))