Javascript и обратный слеш заменяют - PullRequest
34 голосов
/ 19 марта 2010

вот моя строка:

var str = "This is my \string";

Это мой код:

var replaced = str.replace("/\\/", "\\\\");

Я не могу получить вывод:

"This is my \\string"

Я перепробовал каждую комбинацию для регулярного выражения и значения замены.

Любая помощь приветствуется!

Ответы [ 6 ]

43 голосов
/ 25 марта 2014

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

Сделай это ..

var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92));
32 голосов
/ 19 марта 2010

Строка не содержит обратной косой черты, она содержит escape-последовательность \s.

var str = "This is my \\string";

И если вам нужно регулярное выражение, у вас должно быть регулярное выражение, а не строка.

var replaced = str.replace(/\\/, "\\\\");
8 голосов
/ 19 марта 2010

Проблема в том, что \ в вашей первой строке даже не распознается. Он считает, что обратная косая черта будет обозначать escape-последовательность, но \ s не является escape-символом, поэтому игнорируется. Ваш var str интерпретируется просто как "Это моя строка". Попробуйте str.indexOf("\\") - вы обнаружите, что это -1, поскольку обратной косой черты нет вообще. Если вы управляете содержимым str, делайте то, что говорит Дэвид, - добавьте еще один, чтобы избежать первого.

2 голосов
/ 17 октября 2015

Используйте это

str.replace(/(\s)/g,function($0){return $0==' '?' ':'\\s'})

или

str.replace(/ /g,'something').replace(/\s/g,'\\s').replace(/something/g,' ');

'что-то', это может быть комбинация символов, которых нет в строке

var str=' \s';  
  str.replace(/\s/g,'\\s'); 
// return '\\s\\s'   
  str.replace(/ /g,'SpAcE').replace(/\s/g,'\\s').replace(/SpAcE/g,' ');
// return ' \\s' 
1 голос
/ 26 сентября 2016

Если у вас есть несколько экземпляров или обратный слеш:

str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))
0 голосов
/ 19 марта 2010

Я не пробовал это, но следующее должно работать

var replaced = str.replace((new RegExp("\s"),"\\s");

По сути, вы не хотите заменять "\", вы хотите заменить символ, представленный escape-последовательностью "\ s".

К сожалению, вам нужно будет сделать это для каждой буквы алфавита, каждого числа, символа и т. Д., Чтобы охватить все основы

...