2011-02-13 7 views
17

String.prototype.replace() page on MDNによると、私はちょうどなぜChromeやIEでjavascriptの代わりにグローバルフラグが動作しないのですか?回避するにはどうすればよいですか?

str.replace('what to replace', 'replace with', 'flags') 

を使用して'g'にフラグを設定することで簡単に複数のパターンを交換することができるはずです。

Firefox 3.6では完璧に動作します。しかし、ChromeとIE8では、最初のファイルは'what to replace'に置き換わります。

私は

str.replace(/what to replace/gi, 'replace with') 

構文を使用することができます。しかし、私は'what to replace'を配列から抜き出しているため、その構文でフラグを追加するのは難しくなります。

私が使用しようとしているコードは次のとおりです。 ChromeとFirefoxで動作するように変更するにはどうすればよいですか?

function generateQuestion() 
{ 
    //alert('variable length: '+variableList.length); 
    for(i=0;i<variableList.length;i++) 
    { 
     variable = variableList[i]; 
     rep = replacementList[i]; 
     flags = "gi"; 
     questionText = questionText.replace(variable, rep, flags); 
    } 
} 

そして、なぜ私はまったくそれを修正する気にする必要がありますか?リンクで説明されているようにChromeがJavaScriptを評価するべきではありませんか?

答えて

26

非常にページが言及:以下

は、しかし、動作しているように見えます

flagsパラメータの使用String.replaceメソッドは非標準です。ブラウザ間の互換性を確保するには、対応するフラグを持つRegExpオブジェクトを使用します。

基本的には、Firefoxのみで動作するはずです。ドキュメントごとに、あなたはnew RegExpを使用して動的に正規表現を生成することができます

var regex = new RegExp(variable, 'gi'); 
questionText = questionText.replace(regex, rep); 

しかしこれは、エスケープするvariableが必要になります。

+0

ありがとうございました!私はそれがそれのような単純なものでなければならないことを知っていた。問題を見るには別の人が必要でした。:D –

+2

しかし、RegExpの文字列をエスケープしなければならないという問題があります。これはかなりエラーがあります。 – Mitar

+0

@Mitar残念ですが、その周りには方法がありません。あなたはただエスケープすることに注意する必要があります –

4

ウェブキットのstring.replaceの実装には、'foo'.replace('o','i','g')の結果がfioという3番目のパラメータがないようです。

'foo'.replace(/o/gi,'i') 

別のオプションは次のとおりです:あなたがにリンクされ

'foo'.replace(new RegExp('o', 'gi'),'i') 
0

Mozilla Developer Network - JavaScript - String - replace

非標準

からString.replace方法のフラグパラメータの使用は、非標準です。ブラウザ間の互換性を確保するには、対応するフラグを持つRegExpオブジェクトを使用します。 ChromeとFirefoxで動作するようにあなたのコードを取得するにはChromeとFirefoxの

での作業

、あなたは(あなたの文字列がハードコードされていないので)適切なフラグとRegExpオブジェクトを作成する必要があります。 Mozilla Developer Network - RegExp

+0

しかし、RegExpの文字列をエスケープしなければならないという問題があります。これはかなりエラーがあります。 – Mitar

関連する問題