Неожиданное поведение при выходе из обратной косой черты JS - PullRequest
0 голосов
/ 13 февраля 2019

, поэтому я делаю простую функцию, которая разделяет имя файла и путь к каталогу.Я считаю, что с модулем Path узла есть более простой способ, но я подумал, что сам сделаю это для этого проекта.

, поэтому проблема в том, что когда я пишу символ обратной косой черты в строке, я экранирую их в строке, как "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)

1 Ответ

0 голосов
/ 14 февраля 2019

В этом коде есть некоторые моменты, которые я не понимаю.

  1. "C:\\\\Documents\\Newsletters\\Summer2018.pdf" (т. Е. "C:\\Documents\Newsletters\Summer2018.pdf") не выглядит как допустимый путь Windows, так как нет двойных слешейпосле обычно используемой буквы диска (это не так, как в URL 'https://...').

  2. new RegExp("/\\/","ug") равно /\/\//gu и ничего не соответствует.

  3. Результат let pathSeg = pathSegs.slice(0,-1) вообще не используется.

Мне кажется, этого кода достаточно для выполнения задачи:

'use strict';

function splitFileNameFromPath(path, slashType) {
  const pathArray = path.split(slashType),
        fileName = pathArray.pop(),
        dirPath = pathArray.join(slashType);

  return [dirPath, fileName];
}

const path = "C:\\Documents\\Newsletters\\Summer2018.pdf";
const slash = "\\";

const res = splitFileNameFromPath(path, slash);

console.log(res);
console.log(path === res.join(slash));
...