UNIX绝对路径以'/'开头,而Windows以字母'C:'或'\'开头。 node.js是否有标准的多平台函数来检查路径是绝对路径还是相对路径?
答案 0 :(得分:25)
从节点版本0.12.0开始,您可以使用path.isAbsolute(path)
模块中的path函数。
即:
var path = require('path');
if(path.isAbsolute(myPath)) {
//...
}
答案 1 :(得分:9)
您可以使用
path.resolve(yourPath)===yourPath
如果您的路径未规范化,请使用
path.resolve( yourPath ) == path.normalize( yourPath )
答案 2 :(得分:8)
如果对破坏的答案发表评论,如果绝对路径尚未规范化(例如路径:///a//..//b//./
),则建议的解决方案不起作用。
正确的解决方案是:
path.resolve(yourPath) === path.normalize(yourPath)
正如Marc Diethelm在评论中建议的那样,这仍有一些问题,因为path.resolve
会删除尾部斜杠而path.normalize
则不会。
我不确定这些函数的确如何表现(正如您在评论中所读到的那样),无论如何,以下代码段似乎至少在Linux环境中都能正常工作:
path.resolve(yourPath) === path.normalize(yourPath).replace( RegExp(path.sep+'$'), '' );
答案 3 :(得分:3)
这有点令人费解,但我使用(前节点0.12.0)路径模块找到的最强大的方法
function isAbsolute(p) {
return path.normalize(p + '/') === path.normalize(path.resolve(p) + '/');
}
应该注意,path.isAbsolute从节点0.12.0开始存在。
答案 4 :(得分:1)
我不知道node.js,但你可以在github中看到path.js的来源: https://github.com/joyent/node/blob/master/lib/path.js
你可以看到:
// windows version
exports.isAbsolute = function(path) {
var result = splitDeviceRe.exec(path),
device = result[1] || '',
isUnc = device && device.charAt(1) !== ':';
// UNC paths are always absolute
return !!result[2] || isUnc;
};
并且:
// posix version
exports.isAbsolute = function(path) {
return path.charAt(0) === '/';
};
答案 5 :(得分:0)
isRelative(url){
return (/^(\.){1,2}(\/){1,2}$/.test(url.slice(0,3)) ||
/(\/){1,2}(\.){1,2}(\/){1,2}/.test(url));
}
这使得尽管没有节点路径模块API,也可以轻松检查路径是否相对。
(/^(\.|~){1,2}(\/){1,2}$/.test(url.slice(0,3))
此部分检查路径字符串是否以" ./"或" ../"或"〜/"。 如果是,则返回布尔值true。否则执行下一个测试。
/(\/){1,2}(\.){1,2}(\/){1,2}/.test(url)
这只是检查路径字符串是否有" /./"或" /../"。并且在any上返回true,在none上都返回false。
如果两个测试中的任何一个为真,则路径字符串是相对的。
对于Windows。
isRelative(url){
return (/^(\.){1,2}(\\){1,2}$/.test(url.slice(0,3)) ||
/(\\){1,2}(\.){1,2}(\\){1,2}/.test(url));
}