转义反斜杠JS时出现意外行为

时间:2019-02-13 17:59:02

标签: javascript windows filepath

所以我正在做一个简单的函数,将文件名和目录路径分开。我相信节点的Path模块有一种更简单的方法,但是我想我自己为此项目做。

所以问题是当我在字符串中写入反斜杠字符时,我会将它们转义为“ directory \ AnothaDirectory”之类的字符串。它可以运行,但是用于解析的双“ \”和“ \\”在解析后仍保留在字符串中。例如:“ C:\\ Documents \ Newsletters”。

我都尝试过使用单个backslahses,这会引发编译器错误,正如人们所期望的那样。但我也尝试使用正斜杠。反斜杠不能逃脱的原因可能是什么?

function splitFileNameFromPath(path,slashType){

    let pathArray = path.split(slashType),
        fileName = pathArray[pathArray.length - 1],
        elsIndexes = pathArray.length - 1,
        pathSegs = pathArray.slice(0, elsIndexes);              

    let dirPath = pathSegs.join(slashType);
    //adds an extra slash after drive name and colon e.g."C:\\"   
    dirPath = dirPath.replace( new RegExp("/\\/","ug"), "\\" )
    //removes illegal last slash
    let pathSeg = pathSegs.slice(0,-1)
    return [dirPath, fileName]
}

let res = splitFileNameFromPath("C:\\\\Documents\\Newsletters\\Summer2018.pdf","\\");
console.log(res)

1 个答案:

答案 0 :(得分:0)

这段代码中有些时刻我不明白。

  1. "C:\\\\Documents\\Newsletters\\Summer2018.pdf"(即"C:\\Documents\Newsletters\Summer2018.pdf")似乎不是有效的Windows路径,因为通常使用的驱动器号后没有双斜杠(这与URL {{1 }}。

  2. 'https://...'等于new RegExp("/\\/","ug"),并且不匹配任何内容。

  3. 根本没有使用/\/\//gu的结果。

在我看来,这段代码足以完成任务:

let pathSeg = pathSegs.slice(0,-1)