2012-01-12 7 views
0

私は、次があります。変数を.replaceに渡すと、varをreplaceで扱う方法を教えてください。

var r = ':-)' 

html = html.replace(/r/g,"<img src=\""+icon_folder+"/face-"+emoticon+".png\" class=\"emoticonimg\" />"); 

私は/gので、すべての試合が交換されている追加したいです。これは機能しませんが、gを削除して次のようにします:

html = html.replace(r,"<img src=\""+icon_folder+"/face-"+emoticon+".png\" class=\"emoticonimg\" />"); 

これは機能しますか?どのようにして 'g'で動作させることができるので、すべてが置き換えられますか?おかげ

答えて

1

ヒューズは、第二引数としてフラグをRegExpコンストラクタ:

var r = ':-\\)'; 

html = html.replace(new RegExp(r, "g"),... 
+0

ありがとうございました – AnApprentice

+0

@AnApprenticeよろしくお願いします。 :) –

+1

'var r = /: - \)/ g;のような、おそらくはきれいな正規表現リテラルを使うこともできます。 –

2

正規表現構文

/expr/flags 

リテラル構文です。つまり、変数に文字列リテラルの中に変数を含めることはできません。だからあなたの式/r/gはあなたのr変数を使用していないので、文字 "r"を探しています。

正規表現を構築する他の方法はRegExp()コンストラクタである:あなたが変数または文字列リテラルを渡すことができるように

new RegExp(exprString, flags) 

パラメータは、文字列です。あなたは.replace()に正規表現を渡しませんでしたので、

var r = ':-\\)';   // note: need to escape the) 

html = html.replace(new RegExp(r, "g"),"<img src=\""+icon_folder+ 
         "/face-"+emoticon+".png\" class=\"emoticonimg\" />"); 

2番目のコードブロックが働いていた理由がある - それは前方にあなたは自分のr変数を渡すことを意味リテラル正規表現、のスラッシュがありませんでした。

new RegExpを使用すると、バックスラッシュが正規表現では特別な意味を持ちますが、文字列内で特別な意味を持つため、正規表現のリテラルよりも多くの手間がかかります。つまり、/\d/は、new RegExp("\\d")となります。つまり、バックスラッシュを2倍にする必要があります。 (私はあなたが長い正規表現を取得することができますどのくらい面倒が想像することができると確信しています。)あなたの正規表現はまた、エスケープする必要がある閉じ括弧が含まれているので、あなたの文字列は':-\\)'として終了します。あなたのr変数は常にハードコードされた値を持つことになります場合は

は、あなたも言うことができる:

var r = /:-\)/g; // note: have to escape the) 

だけ.replace()rを渡すを。

関連する問題