如何在JavaScript中连接相对URL
我想连接两个字符串,每个字符串表示Javascript中的相对URL 我想加入基本URL如何在JavaScript中连接相对URL,javascript,url,relative-path,Javascript,Url,Relative Path,我想连接两个字符串,每个字符串表示Javascript中的相对URL 我想加入基本URLhttp://www.adress.com/more/evenmore带有以下示例: 。/../address(预期输出:http://www.adress.com/adress) 。/address(具有预期的输出http://www.adress.com/more/adress) 最好的办法是什么?我正在考虑使用regexp并检查 有多少个。/在相对URL之前,然后从基本URL中减去该数量,并将其添加到剩
http://www.adress.com/more/evenmore
带有以下示例:
。/../address
(预期输出:http://www.adress.com/adress
)。/address
(具有预期的输出http://www.adress.com/more/adress
)有多少个
。/
在相对URL之前,然后从基本URL中减去该数量,并将其添加到剩余的URL中。以下函数分解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('/');
}
函数concatAndResolveUrl(url,concat){
var url1=url.split('/');
var url2=concat.split('/');
var url3=[];
for(变量i=0,l=url1.length;i
使用URI.js()::
8年后,许多浏览器(Internet Explorer除外)都支持此功能
>新URL(“../address”,”http://www.adress.com/more/evenmore/)。href
"http://www.adress.com/more/address"
>新URL('../../address','http://www.adress.com/more/evenmore/)。href
"http://www.adress.com/address"
@ning提到的ECMAScriptURL
WebAPI是一个很好的起点:特别是它在普通的JS实现(节点等)中可用,并且不需要您使用一个库来完成nowq实现已经完成的事情。查阅MDN文档,更多,是一个很好的开始
直接从他们的文档中借用(有些):
让我来看看https://developer.mozilla.org';
// ... 省略
设d=新URL('/en US/docs',m);
如果要执行上述操作,那么构建的URL
对象的console.log
将是:'https://developer.mozilla.org/en-US/docs“
重要的是,如果您查阅文档的语法部分,您会注意到second参数是可选的,second参数(如上例所示)表示基本URL(尽管仅在提供两个参数的情况下)
如果两个参数值都是绝对URL,则Web API将接受第一个参数值并丢弃第二个参数值
如果您使用的是Node.js,我建议您查看本机模块,以便在相对路径上进行工作,同样是使用库。这里的主要动机是,旋转您自己的算法(可能只是在这里和那里调用path
)可能比引入一个库更好,该库将引入其他几个依赖项,这些依赖项可能会给您的应用程序带来漏洞和不必要的膨胀(或者对于您所需要的内容来说太重)
但是,如果您在前端工作,您将没有可用的路径
,并且-如评论中所述-Web API的URL
不支持所述的相对路径情况。在这种情况下,您可能需要寻找一个库来完成这项工作;然而,再考虑一下其他的答案,我会考虑尝试一种家用纺纱方法。< /P>
值得赞扬的是,
URI.js
目前只集成,占用空间不大。我在对“.”进行测试的地方修改了它,以同时测试空字符串url1[I]='。| url1[I]='
因此,如果传入的URL有斜杠,它仍然会构成一个有效的URL+1这似乎不像预期的那样有效/a+/b=/a/b应该是/b这几天没有真正需要使用库。如果必须组合相对URL,则此库选项有效。因为ECMAScript的URL抛出了一个错误:new URL(“../the_relative_URL”,“rel/path/”)TypeError:URL构造函数:rel/path/不是有效的URL。我几乎想把它添加到您的答案中。这是避免使用URL的一个很好的理由,尤其是在前端不支持对Node.js本机模块的访问。
function joinUrl(baseUrl, url) {
var theUrl = new URI(url);
if (theUrl.is("relative")) {
theUrl = theUrl.absoluteTo(baseUrl);
}
return theUrl.toString();
}