2011-09-05 12 views
31

私は大文字と小文字を区別しない置換機能の実装を探しています。例えば、それは次のように動作するはずです:大文字と小文字を区別しない置換すべて

'This iS IIS'.replaceAll('is', 'as'); 

と結果は次のようになります。

'Thas as Ias' 

任意のアイデア?
ありがとうございます。

UPDATE:
変数でそれを使用するのは素晴らしいことだ:

var searchStr = 'is'; 
'This iS IIS'.replaceAll(searchStr, 'as'); 

答えて

70

てみ正規表現:

'This iS IIS'.replace(/is/ig, 'as'); 

実施例:http://jsfiddle.net/9xAse/

例えば:
使用RegExpオブジェクト:

var searchMask = "is"; 
var regEx = new RegExp(searchMask, "ig"); 
var replaceMask = "as"; 

var result = 'This iS IIS'.replace(regEx, replaceMask); 
+1

素晴らしい!しかし、代わりに変数を使用する方法は? '.replace(searchMask、replaceMask)'? –

+0

@DOTNET忍者:ポストを例文で更新しました。 – Chandu

+0

実際に何が起こっているのかを実際に説明している2番目のコードサンプルでは、​​2つのアップフォートを与えます。 –

1

は、正規表現を使用してください。

'This iS IIS'.replace(/is/ig, 'as') 
19
String.prototype.replaceAll = function(strReplace, strWith) { 
    // See http://stackoverflow.com/a/3561711/556609 
    var esc = strReplace.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); 
    var reg = new RegExp(esc, 'ig'); 
    return this.replace(reg, strWith); 
}; 

これはあなたが提供した例をまさに実装しています。

'This iS IIS'.replaceAll('is', 'as'); 

戻り

'Thas as Ias' 
+0

編集:忘れてしまった! –

+0

これは確かに正しいソリューションです。正規表現の意味を持つ文字がある場合、Chanduの答えは混乱します。 – FlorianB

6

あなたが正規表現のソリューションを使用する場合は、あなたの文字列を置換例えば含まれている場合、あなたが問題を取得することができます"?"だから、すべての正規表現文字をエスケープするか、例えばを使用する必要があります。:

String.replacei = String.prototype.replacei = function (rep, rby) { 
    var pos = this.toLowerCase().indexOf(rep.toLowerCase()); 
    return pos == -1 ? this : this.substr(0, pos) + rby + this.substr(pos + rep.length); 
}; 

これは文字列で「ある」の出現をすべて変更されません。したがって、関数にwhileループを書くことができます。

+0

これはregexpソリューションよりも2倍高速です。https://jsperf.com/replace-all-case-insenstive/1を参照してください。 – kofifus

0

私はstr_ireplaceの関数をphp.jsから取得することをお勧めします。これは配列の文字列を置き換えます。

関連する問題