为了账号安全,请及时绑定邮箱和手机立即绑定

解析原生 JavaScript 中的路径字符串

解析原生 JavaScript 中的路径字符串

GCT1015 2022-10-13 16:21:57
我正在尝试将字符串解析为理论上的虚拟路径(全部在客户端创建),使用普通的旧 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);


查看完整回答
反对 回复 2022-10-13
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信