繁体   English   中英

如何检查路径是绝对路径还是相对路径

[英]How to check if a path is absolute or relative

UNIX绝对路径以'/'开头,而Windows以字母'C:'或'\\'开头。 node.js是否有标准的多平台函数来检查路径是绝对路径还是相对路径?

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

即:

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

你可以用

path.resolve(yourPath)===yourPath

如果您的路径未规范化,请使用

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

正如对破坏的答案所评论的那样,如果绝对路径尚未规范化(例如路径: ///a//..//b//./ ),则建议的解决方案///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+'$'), '' );

这有点令人费解,但我发现只使用(前节点0.12.0)路径模块的最强大的方法

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)); 
    }

这使得尽管没有节点路径模块API,也可以轻松检查路径是否相对。

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

此部分检查路径字符串是否以“./”或“../”或“〜/”开头。 如果是,则返回布尔值true。 否则执行下一个测试。

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

这只是检查路径字符串是“/./”还是“/../”。 并且在any上返回true,在none上都返回false。

如果两个测试中的任何一个为真,则路径字符串是相对的。

对于窗户。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM