2017-01-14 7 views
1

特定の単語を略語に置き換える関数を記述しようとしています。私はRegExp関数を使用してバックスラッシュを含む部分文字列を置換するjavascript

"*" 

"\\cdot" 

を交換したい

str="Calculate $2\\cdot 2$" 

いる私のコードは次のようになります:

str = str.replace(RegExp("\\cdot",'g'),"*"); 

そして、例えば、私は、文字列を持っています結果は

です
str = "Calculate $2\\cdot 2$" 

そして、私は、略語で置き換えたい単語のリストを全部持っているので、RegExp関数を使用する必要があります。私はそれが知っている

作品です。しかし、私はRegExpがなぜそうでないのか分かりません。

答えて

2

文字列を定義するときにスラッシュ文字をエスケープし、もう一度正規表現を使用する必要があります。一度String内でスラッシュをエスケープすると、得られる正規表現は次のようになります:\cdot。スラッシュ表記(/regex/)で直接正規表現を定義すると、文字列がないため、正規表現を一度エスケープするだけで済みます。

var str = "Calculate $2\\cdot 2$"; 
 
str = str.replace(RegExp("\\\\cdot",'g'),"*"); 
 
console.log(str);


あなたはスラッシュと、一般的に前に付加すべての正規表現の特殊文字にしたい場合は、this answerに依存して、以下のソリューションを使用することができます。バックスラッシュはStringの一部であるため、一度エスケープする必要があります。 Stringをどこかから取得すると、正しくエスケープされます。文字列をコードに明示的に書き込む場合にのみ必要です(var string = "string";)。

var str = "Calculate $2\\cdot 2$"; 
 
var regex = "\\cdot"; 
 
str = str.replace(RegExp(escapeRegExp(regex), 'g'),"*"); 
 
console.log(str); 
 

 
function escapeRegExp(str) { 
 
    return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); 
 
}

+0

ありがとう!それでおしまい!余分なバックスラッシュを使用する必要がない何らかの方法がある場合、今あなたはいますか?問題は、私は省略形で置き換えたい単語の長いリストを持っているということです。それらの中にはバックスラッシュがあります。余分なバックスラッシュを持つようにリスト内の単語を変更することもできますが、省略語から長い単語に戻って戻っても機能しません。 –

+0

ここで問題となるのは、正規表現では '^' '' '' '' 'などのすべての制御文字に対してバックスラッシュが必要だということです。あなたの単語の中にはこれらの文字が含まれている場合、この。私は拡張を使って答えを更新します。 –

+0

ありがとう、それは完璧に動作します! –

関連する問題