也许我正在努力(我应该只寻找./
和../
的前缀,但我不想重新发明轮子并正确编写函数检测相对路径(适用于所有平台等)
是否有npm
个包来执行此操作?当然这个问题已经解决了......
除了现有的库,我的方法是使用path
模块函数来join
可能相对于已知前缀的路径,然后看看结果是什么,假设{ {1}}将以平台安全的方式允许某种区别特征。
还有其他建议吗?途径?
答案 0 :(得分:10)
UPDATE2:TomDotTom在这里找到了一个更健全的答案:How to check if a path is absolute or relative
这里转载(但反过来):
var path = require('path');
function isRelative(p) {
return path.normalize(p + '/') !== path.normalize(path.resolve(p) + '/');
}
对于节点v0.12及更高版本,我建议使用path.isAbsolute
。
答案 1 :(得分:8)
现在有点晚了,但对于其他人在同一个问题上搜索:
从节点版本0.12.0开始,您拥有(function iteratePaths() {
var dirs = [];
for(var i = 0; i < _paths.length; i++) {
buildDirectories(dirs, _paths[i].split('/'));
}
})();
function findDir(dir, obj) {
for(var i = 0; i < dir.length; i++) {
if(dir[i].name === obj.name) {
return dir[i];
}
}
return undefined;
}
function buildDirectories(dir, subs) {
if(subs.length === 0) return;
var obj = {name: subs.shift(), dirs: []};
var existingDir = findDir(dir, obj);
if(!existingDir) {
dir.push(obj);
}
buildDirectories((existingDir || obj).dirs, subs);
}
模块中的path.isAbsolute(path)
函数。要检测您的路径是否相对,请使用它的协商:
即:
path
答案 2 :(得分:0)
function isRelative(str)
{
//Remove quotes as it can potentially mess up the string
str=str.replace("\'\"",'');
return str.substring(0,2)=="./"||str.substring(0,3)=="../";
}
在这个例子中,我们只允许字符串路径开头的相对字符串