所以我正在创建一个简单的函数来分隔文件名和目录路径。我相信节点的路径模块有一个更简单的方法,但我想我自己会为这个项目做。
所以问题是当我在字符串中写一个反斜杠字符时,我在字符串中将它们转发为“directory \ AnothaDirectory”。它运行,但是为了转义而使用的双“\”和“\\”在解析后仍然保留在字符串中。例如:“C:\\ Documents \ Newsletters”。
我已经尝试过两种方法都使用单一的反向操作,这会引发编译器错误。但我也尝试使用正斜杠。什么原因可能是反斜杠没有逃脱?
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)
这段代码中有一些时刻我不明白。
"C:\\\\Documents\\Newsletters\\Summer2018.pdf"
(即"C:\\Documents\Newsletters\Summer2018.pdf"
)似乎不是一个有效的Windows路径,因为在通常使用的驱动器号后没有双斜杠(它不像URL 'https://...'
中那样)。new RegExp("/\\/","ug")
的结果根本没有使用。在我看来,这段代码足以完成任务:
/\/\//gu