我正在尝试将字符串解析为理论上的虚拟路径(全部在客户端创建),使用普通的旧 JavaScript,没有 NodeJS,什么都没有(我尝试创建一个新 URL 或将路径设置为 href 等,但我希望它在网络工作者内部工作)。基本上,有一个虚拟文件系统,它以 . 开头,"C:/"然后像所有其他路径系统一样下降。假设我得到一个字符串作为输入,例如"C:/someDir/someOtherDir/someThirdDir/../../folderInSomeDir/fileInFolderInSomeDir.txt"所以理论上这将访问,正如文件本身的名称所说,文件夹内的文件,该文件夹本身位于名为someDir.最难处理的部分是该../../部分,因此上面的预期输出字符串将是"C:/someDir/folderInSomeDir/fileInFolderInSomeDir.txt"我只是想知道如何准确地处理该../../部分,我尝试拆分字符串/并循环遍历各个部分,确定当前字符串是否等于..,并跟踪当前目录,这将立即在 each 之前..,但我对接下来要做什么以获取输出字符串一无所知。这是我的功能,目前b.onclick = () => { out.innerHTML = resolve(p.value)};function resolve(path, basePath = "/") { var pathd = pathify(path) if(basePath != "/") basePath = resolve(basePath) var based = pathify(basePath) var baseDirs = based.split("/") var directs = pathd.split("/") var upDirs = 0 var currentDir = "" var numberDirs var result directs.forEach((x, i, ar) => { if(x == ".." || i == 0 && x == "") { upDirs++ } else { currentDir = x } }) result = directs.join("/") //what else do I Do?! return result } function pathify(path) { var newPath = "" if(typeof path == "string") { var slashesDoubled = 0, dotsDoubed path.split("").forEach(x => { var isIts = [ "\n" ]
1 回答
狐的传说
TA贡献1804条经验 获得超3个赞
您可以将其拆分并将其缩减为一个新数组。如果段是.,则忽略它,如果是..从结果中弹出最后一个段,则添加它:
const path = "C:/someDir/someOtherDir/someThirdDir/../../folderInSomeDir/fileInFolderInSomeDir.txt";
const result = path.split('/')
.reduce((a, v) => {
if (v === '.'); // do nothing
else if (v === '..') a.pop();
else a.push(v);
return a;
}, [])
.join('/');
console.log(result);
添加回答
举报
0/150
提交
取消