基于给定路径求相对路径 - 凡事预则立,�预则废

今天群里出了个题目,原题如下:


求一函数
原字符串为
var str = "aaa/bbb/ccc/"
如果用户输入
'../dd.js'
那么返回
aaa/bbb/dd.js
如果用户输入
'../../ee.js'
那么返回
aaa/ee.js
如果用户输入
'../../../hh.js'
那么返回
hh.js
function adjustPath(str, user){

}

�外应群里童鞋处�特许情况,�需�处�一下情况

  1. URL中存在./,例如:../..//xx.js

  2. URL中存在//,例如:./ii.js

其实对于这题,很早以�就看到过,�是一直没去花时间,正好今天早上闲�,就写了个:


function absPath(str, user){
	var sCount = 0;
	var url = (user + '').replace(/\.\.\//g, function(){
		sCount++;
		return '';
	})
	.replace(/\.\//g, '');
	
	str = (str + '').replace(/\/+$/, '');
	str = str.split('/').slice(0, sCount > 0 ? -sCount : void 0).join('/');

	url = str.length > 0 ? str + '/' + url : url;
	return url.replace(/\/\/+/g, '/');
}

在以上代��出去�,群里影�几乎为 0 的情况下,出去�了�水,想到应该得出点奇淫技巧了,于是就�有了:


//MS 还是比较给力的
function absPath(str, user){
	var a = document.createElement('a');
	a.href = str + user;
	//console.info('getAttribute, href = ', a.getAttribute('href', 4));
	var urlPri = location.href.slice(0, location.href.lastIndexOf('/') + 1);
	//实际�有IE7- 需� a.getAttribute('href', 4) �得�览器拼接好的URL
	return (!-[1,] ? a.getAttribute('href', 4) : a.href).replace(urlPri, '');
}

测试代�如下:


console.warn('test 1 - ', absPath('aaa/bbb/ccc/', '../dd.js'));
console.warn('test 2 - ', absPath('aaa/bbb/ccc/', '../../ee.js'));
console.warn('test 3 - ', absPath('aaa/bbb/ccc/', '../../../hh.js'));
console.warn('test 4 - ', absPath('aaa/bbb/ccc/', '../..//xx.js'));
console.warn('test 5 - ', absPath('aaa/bbb/ccc/', './ii.js'));


最�给出群里 "糖果男孩" 的一个比较给力函数,�过如果需�支�上�说的几个特许情况,还得改造一下:


function adjustPath(str, user){
	var patharr = str.replace(/\/$/,"").split("\/");
	var nstr = user.replace(/\.\.\//g,function(){
		patharr.pop();
		return "";
	});
	return patharr.join("/")+"/"+nstr;
}
Tags:Javascript

共0评论

�表评论

  • [URL] [URL2] [EMAIL] [QUOTE] UBB表情 [B] [I] [S] [U]

最新评论�回�

    loading

最近�表

    loading

网站分类

    loading

文章归档

    loading

�情链接

Top Comments Footer