52

これが私の文字列です:

var str = "This is my \string";

これは私のコードです:

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

出力を次のように取得できません:

"This is my \\string"

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

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

4

8 に答える 8

46

文字列には円記号は含まれていません\s。エスケープシーケンスが含まれています。

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

また、正規表現が必要な場合は、文字列ではなく正規表現を使用する必要があります。

var replaced = str.replace(/\\/, "\\\\");
于 2010-03-19T17:29:41.017 に答える
13

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

于 2010-03-19T17:33:14.673 に答える
5

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

str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))
于 2016-09-26T18:34:27.177 に答える
1

これを使って

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' 
于 2015-10-17T14:28:32.910 に答える
-2

私はこれを試していませんが、次のように動作するはずです

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

基本的に、"\" を置換するのではなく、"\s" エスケープ シーケンスで表される文字を置換します。

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

于 2010-03-19T17:49:38.270 に答える