web-dev-qa-db-ja.com

Javascriptとバックスラッシュが置き換えられます

ここに私の文字列があります:

var str = "This is my \string";

これは私のコードです:

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

私の出力を得ることができません:

"This is my \\string"

正規表現と置換値について考えられるすべての組み合わせを試しました。

どんな助けも大歓迎です!

35
Frankie

長い間これに悩まされており、すべての答えは、ソース文字列がすでにバックスラッシュをエスケープしている必要があると主張し続けていました...常にそうではありません。

これを行う ..

var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92));
42
thegajman

文字列にはバックスラッシュは含まれず、\sエスケープシーケンスが含まれます。

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

正規表現が必要な場合は、文字列ではなく、正規表現が必要です。

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

問題は、最初の行の\が認識されないことです。バックスラッシュはエスケープシーケンスをマークすると考えていますが、\ sはエスケープ文字ではないため、無視されます。 var strは、「これは私の文字列」と解釈されます。 str.indexOf("\\")を試してください-バックスラッシュがないため、-1であることがわかります。 strの内容を制御する場合は、Davidの言うことを実行します。最初のエスケープをエスケープするために別の\を追加します。

9
Tesserex

これを使って

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' 
2
user3426099

複数のインスタンスまたはバックスラッシュがある場合:

str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))
1
user2939415

私はこれを試していませんが、次のshould work

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

基本的に、「\」を置き換えるのではなく、「\ s」エスケープシーケンスで表される文字を置き換える必要があります。

残念ながら、すべてのベースをカバーするために、アルファベットのすべての文字、すべての数字、記号などに対してこれを行う必要があります

0
Graza