ここに私の文字列があります:
var str = "This is my \string";
これは私のコードです:
var replaced = str.replace("/\\/", "\\\\");
私の出力を得ることができません:
"This is my \\string"
正規表現と置換値について考えられるすべての組み合わせを試しました。
どんな助けも大歓迎です!
長い間これに悩まされており、すべての答えは、ソース文字列がすでにバックスラッシュをエスケープしている必要があると主張し続けていました...常にそうではありません。
これを行う ..
var replaced = str.replace(String.fromCharCode(92),String.fromCharCode(92,92));
文字列にはバックスラッシュは含まれず、\s
エスケープシーケンスが含まれます。
var str = "This is my \\string";
正規表現が必要な場合は、文字列ではなく、正規表現が必要です。
var replaced = str.replace(/\\/, "\\\\");
問題は、最初の行の\が認識されないことです。バックスラッシュはエスケープシーケンスをマークすると考えていますが、\ sはエスケープ文字ではないため、無視されます。 var strは、「これは私の文字列」と解釈されます。 str.indexOf("\\")
を試してください-バックスラッシュがないため、-1であることがわかります。 strの内容を制御する場合は、Davidの言うことを実行します。最初のエスケープをエスケープするために別の\を追加します。
これを使って
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'
複数のインスタンスまたはバックスラッシュがある場合:
str.split(String.fromCharCode(92)).join(String.fromCharCode(92,92))
私はこれを試していませんが、次のshould work
var replaced = str.replace((new RegExp("\s"),"\\s");
基本的に、「\」を置き換えるのではなく、「\ s」エスケープシーケンスで表される文字を置き換える必要があります。
残念ながら、すべてのベースをカバーするために、アルファベットのすべての文字、すべての数字、記号などに対してこれを行う必要があります