Как проверить, является ли путь абсолютным или относительным
абсолютный путь UNIX начинается с"/", тогда как Windows начинается с алфавита "C: "или"". Делает узел.js имеет стандартную мультиплатформенную функцию, чтобы проверить, является ли путь абсолютным или относительным ?
6 ответов
это немного поздно, но для других, ищущих по той же проблеме:
начиная с версии узла 0.12.0 вы можете использовать path.isAbsolute(path)
можно использовать
path.resolve(yourPath)===yourPath
Если ваш путь не нормализуется, используйте
path.resolve( yourPath ) == path.normalize( yourPath )
как прокомментировал ответ дистрой, предлагаемые решения не работают, если абсолютный путь еще не нормализован (например, путь:///a//..//b//./
).
правильное решение:
path.resolve(yourPath) === path.normalize(yourPath)
As Марк Diethelm предлагает в комментариях, это имеет еще некоторые проблемы, так как path.resolve
удаляет косые черты в то время как path.normalize
нет.
Я не уверен, как именно эти функции ведут себя (как вы можете прочитать в комментариях), в любом случае следующий фрагмент, похоже, отлично работает, по крайней мере, в средах Linux:
path.resolve(yourPath) === path.normalize(yourPath).replace( RegExp(path.sep+'$'), '' );
Это немного запутанный, но самый надежный способ, который я нашел, используя только модуль пути (pre node 0.12.0)
function isAbsolute(p) {
return path.normalize(p + '/') === path.normalize(path.resolve(p) + '/');
}
следует отметить, что путь.isAbsolute существует от узла 0.12.0 и далее.
Я понятия не имею о узле.js, но вы можете увидеть источник пути.js в github: 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)
Это просто проверяет, имеет ли строка пути либо "/./" или./" ./". и возвращает true, и false в ни.
если любой из двух тестов, правда тогда строка пути является относительной.
для windows.
isRelative(url){
return (/^(\.){1,2}(\){1,2}$/.test(url.slice(0,3)) ||
/(\){1,2}(\.){1,2}(\){1,2}/.test(url));
}