所以我想在Javascript中使用相对URL连接字符串.
base url =" http://www.adress.com/more/evenmore "
同
relative url ="../../adress"=>" http://www.adress.com/adress "
relative url ="../adress"=>" http://www.adress.com/more /地址 "
什么是最好的方式?我正在考虑使用正则表达式并检查
我找到多少"../",然后从baseurl中减去该数量并将它们添加到剩下的内容中.
Min*_*ang 11
以下函数分解URL然后解析它.
function concatAndResolveUrl(url, concat) {
var url1 = url.split('/');
var url2 = concat.split('/');
var url3 = [ ];
for (var i = 0, l = url1.length; i < l; i ++) {
if (url1[i] == '..') {
url3.pop();
} else if (url1[i] == '.') {
continue;
} else {
url3.push(url1[i]);
}
}
for (var i = 0, l = url2.length; i < l; i ++) {
if (url2[i] == '..') {
url3.pop();
} else if (url2[i] == '.') {
continue;
} else {
url3.push(url2[i]);
}
}
return url3.join('/');
}
Run Code Online (Sandbox Code Playgroud)
nin*_*ing 11
8年后,许多浏览器(Internet Explorer除外)都支持URL构造器。
> new URL('../address', 'http://www.adress.com/more/evenmore/').href
"http://www.adress.com/more/address"
> new URL('../../address', 'http://www.adress.com/more/evenmore/').href
"http://www.adress.com/address"
Run Code Online (Sandbox Code Playgroud)
使用URI.js(http://medialize.github.com/URI.js/docs.html#absoluteto):
function joinUrl(baseUrl, url) {
var theUrl = new URI(url);
if (theUrl.is("relative")) {
theUrl = theUrl.absoluteTo(baseUrl);
}
return theUrl.toString();
}
Run Code Online (Sandbox Code Playgroud)
URL@ning 提到的 ECMAScript Web API 是一个很好的起点:尤其是因为它在 vanilla JS 实现(Node 等)中可用,并且不需要您使用一个库来执行 nowq 已经完成的实现。查阅 MDN 文档,更具体地说是示例,是一个很好的起点。
直接从他们的文档中借用(有点):
let m = 'https://developer.mozilla.org';
// ... omitted
let d = new URL('/en-US/docs', m);
Run Code Online (Sandbox Code Playgroud)
如果您要执行上述操作,那么构造对象console.log的.toStringURL,您的输出将是:'https://developer.mozilla.org/en-US/docs'。
重要的是,如果您查阅文档的语法部分,您会注意到第二个参数是可选的,第二个参数(如上例所示)表示基本URL(尽管仅在提供两个参数的情况下)。
如果两个参数值都是绝对 URL,Web API 会采用第一个并丢弃第二个。
如果您正在使用 Node.js,我鼓励您查看本地路径模块以在相对路径上工作,再次使用库。这里的主要动机是启动你自己的算法(可能只是调用path这里和那里)可能比引入一个库更好您需要的重量很重)。
但是,如果您在前端工作,那么您将无法path使用并且 - 正如@cburgmer 的回答评论中所述 - Web APIURL不支持提到的相对路径情况。在这种情况下,您可能需要寻找一个库来为您完成此操作;然而,再一次,考虑到其他答案,我会考虑尝试一种自制的方法。
值得称赞的是,URI.js目前仅集成了一个非开发人员。依赖性并且没有巨大的足迹。
| 归档时间: |
|
| 查看次数: |
14311 次 |
| 最近记录: |