Неожиданное поведение при экранировании обратной косой черты JS

поэтому я делаю простую функцию, которая разделяет имя файла и путь к каталогу. Я считаю, что есть более простой способ с модулем 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.info(res)

\\ в строке и регулярном выражении - это одинарная косая черта \, потому что это escape-символ, и он экранирован. это просто ничего не делать dirPath = dirPath.replace( new RegExp("/\/","ug"), "\\" ).

jcubic 13.02.2019 19:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

  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.info(res);
console.info(path === res.join(slash));

Другие вопросы по теме