如何在 JavaScript 中解析没有基本 URL 的相对 URL

Fra*_* Yu 12 javascript

对于绝对 URL,我们可以使用new URL(str);进行解析 对于带有基本 URL 的相对 URL,我们可以得到new URL(path, base). 如何解析没有基本 URL 的相对 URL?例如,folder/file.ext?a=1&b=2#hash应该解析为

{
    pathname: "folder/file.ext",
    search: "?a=1&b=2",
    hash: "#hash"
}
Run Code Online (Sandbox Code Playgroud)

第三方库很好,但我更喜欢内置的库和函数。更喜欢跨平台(浏览器/Node.js)解决方案。不需要IE。

phi*_*ole 9

这是一个很好的问题。目前,URL 标准不支持在不需要基础的情况下操作相对 URL。使用虚拟基址并不总是有效,因为带有点段的相对 URL../path会根据基址进行解析,而以后无法再次恢复它。不幸的是,URL 标准中没有考虑到这一点。尽管有一些讨论将其添加到#531中。

同时,请查看reurl,它是一个库,允许您操作相对 URL,而无需诉诸脆弱的手动字符串操作。