Замените одиночную обратную косую черту "\" двойными обратными косыми чертами "\\"
У меня есть строка с файловым путем. Я хочу заменить все одиночные обратные косые черты ("\") двойными обратными косыми чертами ("\\").
var replaceableString = "c:\asd\flkj\klsd\ffjkl";
var part = /@"\\"/g;
var filePath = replaceableString .replace(part, /@"\\"/);
console.log(filePath);
Консоль показала мне это.
c:asdlkjklsdfjkl
Я нашел что-то вроде этого, к сожалению, это не сработало. Замена\на \\
Ответы
Ответ 1
var replaceableString = "c:\asd\flkj\klsd\ffjkl";
alert(replaceableString);
Это предупредит вас c:asdlkjklsdfjkl
потому что "\" - это escape-символ, который не рассматривается.
Чтобы иметь обратную косую черту в вашей строке, вы должны сделать что-то вроде этого.
var replaceableString = "c:\\asd\\flkj\\klsd\\ffjkl";
alert(replaceableString);
Это предупредит вас c:\asd\flkj\klsd\ffjkl
JS Fiddle
Подробнее о вариантах Escape
Если вы хотите, чтобы ваша строка имела "\" по умолчанию, вам следует избегать ее. Используйте функцию escape()
var replaceableString = escape("c:\asd\flkj\klsd\ffjkl");
alert(replaceableString);
JS Fiddle
Ответ 2
Пытаться:
var parts = replaceableString.split('\\');
var output = parts.join('\\\\');
Лично, поскольку я не настолько разбираюсь в reg exps, я стараюсь избегать их при работе с не-буквенно-цифровыми символами, как из-за удобочитаемости, так и во избежание странной ошибки.
Ответ 3
У вас есть несколько проблем в коде.
-
Чтобы получить переменную \
в вашей строковой переменной, вам нужно ее избежать.
Когда вы создаете такую строку: replaceableString = "c:\asd\flkj\klsd\ffjkl";
символы с символом \
before рассматриваются как escape-последовательности. Поэтому во время создания строки он пытается интерпретировать escape-последовательность \a
, так как это недопустимо, он сохраняет a
в строке. Например, \n
было бы интерпретировано как новая строка.
-
Я предполагаю, что @
исходит из примера.net. Javascript не знает "сырые" строки.
-
удалите цитаты из вашего регулярного выражения.
Это будет делать то, что вы хотите:
var string = "c:\\asd\\flkj\\klsd\\ffjkl";
var regex = /\\/g;
var FilePath = string.replace(regex, "\\\\");
Ответ 4
\является escape-символом. Поэтому replaceableString
не содержит обратных косых черт.
Чтобы исправить это, вы должны объявить строку следующим образом:
var replaceableString = "c:\\asd\\flkj\\klsd\\ffjkl";
Ответ 5
Если у вас нет контроля над содержимым строки, в которой вы пытаетесь найти обратную косую черту, и она содержит значения SINGLE \
(например, переменная myPath содержит C:\Some\Folder\file.jpg
), то вы можете фактически ссылаться на сингл обратная косая черта в JavaScript как String.fromCharCode(92)
.
Итак, чтобы получить имя файла в моем примере с файловой дорожкой выше.
var justTheName = myPath.split(String.fromCharCode(92)).pop();
Ответ 6
В случае соответствия строк лучше использовать encodeURIComponent, decodeURIComponent.
match(encodeURIComponent(inputString));
function match(input)
{
for(i=0; i<arr.length; i++)
{
if(arr[i] == decodeURIComponent(input))
return true;
else return false;
}
}
Ответ 7
В случае одной обратной косой черты в строке метод замены javascript не позволил мне заменить одиночную косую черту.
Вместо этого мне пришлось использовать метод split, который возвращает массив разделяемых строк, а затем объединяет строки без обратной косой черты (или того, что вы хотите заменить)
Решение (замененная обратная косая черта с подчеркиванием):
var splitText = stringWithBackslash.split('\\');
var updatedText = splitText[0] + '_' + splitText[1];
Ответ 8
Сначала закодировать строку
затем замените все вхождения% 5C% 5C% 5C
В конце декодируют строку
var result = encodeURI(input);
result=decodeURI(result.replace(/%5C/g,"%5C%5C"));