如何检查path是绝对的还是相对的

UNIX绝对path以'/'开始,而Windows则以字母'C:'或'\'开头。 node.js有一个标准的多平台function来检查path是绝对的还是相对的?

这有点晚,但对于其他人在同一个问题上search:

从节点版本0.12.0开始,可以使用path模块中的path.isAbsolute(path)函数。

即:

 var path = require('path'); if(path.isAbsolute(myPath)) { //... } 

正如dystroy的答案所评论的那样,如果绝对path还没有被标准化(例如path: ///a//..//b//./ ),那么所提出的解决scheme就不起作用。

正确的解决scheme是:

 path.resolve(yourPath) === path.normalize(yourPath) 

正如Marc Diethelm在评论中所build议的那样,这仍然存在一些问题,因为path.resolve会删除尾部的斜线,而path.normalize则不会。

我不确定这些函数的行为如何(正如你可以在注释中看到的那样),无论如何下面的代码片段似乎至less在Linux环境中工作正常:

 path.resolve(yourPath) === path.normalize(yourPath).replace( RegExp(path.sep+'$'), '' ); 

你可以使用

 path.resolve(yourPath)===yourPath 

如果你的path没有正常化,请使用

 path.resolve( yourPath ) == path.normalize( yourPath ) 

这有点复杂,但是我发现使用(pre节点0.12.0)path模块的最稳健的方法

 function isAbsolute(p) { return path.normalize(p + '/') === path.normalize(path.resolve(p) + '/'); } 

需要注意的是,path.isAbsolute从节点0.12.0开始存在。

我不知道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) === '/'; }; 
  isRelative(url){ return (/^(\.){1,2}(\/){1,2}$/.test(url.slice(0,3)) || /(\/){1,2}(\.){1,2}(\/){1,2}/.test(url)); } 

这样可以很容易地检查path是否相对,尽pipe没有节点path模块API。

 (/^(\.|~){1,2}(\/){1,2}$/.test(url.slice(0,3)) 

这部分检查pathstring是否以“./”或“../”或“〜/”开头。 如果是,则返回布尔值true。 否则,执行下一个testing。

 /(\/){1,2}(\.){1,2}(\/){1,2}/.test(url) 

这只是检查pathstring是否有“/./”或“/../”。 并在任何情况下返回true,在两者都不为false

如果两个testing中的任何一个是真的,那么pathstring是相对的。

对于窗户。

  isRelative(url){ return (/^(\.){1,2}(\\){1,2}$/.test(url.slice(0,3)) || /(\\){1,2}(\.){1,2}(\\){1,2}/.test(url)); }