Вопрос по javascript, regex – Обратные косые черты - Регулярное выражение - Javascript

6

Я хотел создать JS-функцию, объединяющую список аргументов с правильным путем (поскольку я не мог быть уверен, указана ли часть пути с косой чертой или без нее)

Это функция:

concatPath = function() {
    var path = "";
    for(var i = 0; i < arguments.length; i++)   {
        path += arguments[i].replace("(\\|/)$|^(\\|/)", "") + "/";
    }
    return path;
}

Используемый RegEx соответствовал всем начальным и конечным слешам и обратным слешам наhttp://regexpal.com Но функция не работает должным образом (RegEx не совпадает). Кроме того, Chrome заявляет

SyntaxError: Invalid regular expression: /()$|^()/: Unterminated group

когда я просто использую RegEx

 (\\)$|^(\\)

Однако, используя RegEx

 (\\)$|^(\\)

работает отлично.

Уже слишком поздно или я что-то упустил?

Заранее спасибо!

Лео

Ваш Ответ

2   ответа
12

/.../) вместо строкового литерала ('...' или же"...") в призыве кreplace, Строки имеют свою собственную интерпретацию обратной косой черты, которая срабатывает до того, как конструктор регулярных выражений получит трещину, поэтому вам нужен дополнительный уровень цитирования.

Совпадение с одной обратной косой чертой, литералом регулярного выражения:/\\/

Совпадение с одной обратной косой чертой, регулярное выражение в строке:'\\\\'

Но в литерале регулярных выражений вы также должны ставить обратную косую черту перед косой чертой, так как прямая косая черта является ограничителем всего этого:

path += arguments[i].replace(/(\\|\/)$|^(\\|\/)/, "") + "/";

Или, если по какой-либо причине вы женаты на использовании строк, это также должно работать:

path += arguments[i].replace("(\\\\|/)$|^(\\\\|/)", "") + "/";

Как примечание, когда ваши альтернативы одиночные символы,(x|y) чрезмерно Вы можете просто использовать классы символов:[xy], В этом случае вы получите это:

path += arguments[i].replace(/[\\\/]$|^[\\\/]/, "") + "/";

path += arguments[i].replace("[\\\\/]$|^[\\\\/]", "") + "/";
добро пожаловать! Вы должны принять ответ (мой или агент-j), чтобы люди с большей вероятностью ответили на ваши вопросы в будущем.
Большое спасибо, что сделал это, вы также можете сказать мне, почему я должен использовать & quot; \\\\ & ap; Я думал, что \\ " этого будет достаточно, так как мне нужен один обратный слеш, чтобы он не выходил из & quot; Leo Selig
Использование строки позволяет отбрасывать переменные в. #Usecase
остерегайтесь необходимости обратной косой черты в комментариях StackOverflow ... :) Когда вы используете строковую форму, вы проходите через два парсера - парсер Javascript, который строит строку из исходного кода, и Regexp анализатор, который строит регулярное выражение из строки. Регулярное выражение должно иметь две обратные косые черты, но чтобы получить одну обратную косую черту в строке из литерала, нужно удвоить ее. Вместе это означает четыре обратных слеша. Попробуй это:alert("--> \\\\ <--") - то, что вы видите, это то, что Regexp.new видит, когда вы передаете строкуreplace.
4

етствовать одному\ с нужной вам строкой JavaScript\\\\что может быть тем, что происходит.

new Regexp('^[\\\\/]|[\\\\/]$')

Вы также можете попробовать/^[\\\/]|[\\\/]$/g нотации.

s = 'c:\\folder\\'
console.log(s.replace(/^[\\\/]|[\\\/]$/g, ''))

Похожие вопросы