web-dev-qa-db-ja.com

JavaScript - 文字列内のすべてのコンマを置き換えます

私は複数のカンマを含む文字列を持っています、そして文字列replaceメソッドは最初のものだけを変更します:

var mystring = "this,is,a,test"
mystring.replace(",","newchar", -1)

結果 "thisnewcharis,a,test"

ドキュメントには、デフォルトですべてが置き換えられること、および「-1」もすべてを置き換えることが示されていますが、失敗します。何かご意見は?

311
mike

String.prototype.replace() functionの3番目のパラメータは標準として定義されたことがないため、ほとんどのブラウザは単純にそれを実装していません。

最善の方法は、 正規表現g global )フラグとともに使用することです。

var myStr = 'this,is,a,test';
var newStr = myStr.replace(/,/g, '-');

console.log( newStr );  // "this-is-a-test"

まだ問題がありますか?

注意すべき重要なことは、正規表現は エスケープする必要がある特殊文字 を使用するということです。例として、ドット(.)文字をエスケープする必要がある場合は、正規表現構文のようにドットが任意の1文字に一致するように/\./リテラルを使用する必要があります(行末文字を除く)。

var myStr = 'this.is.a.test';
var newStr = myStr.replace(/\./g, '-');

console.log( newStr );  // "this-is-a-test"

変数を置換文字列として渡す必要がある場合は、正規表現リテラルを使用する代わりにRegExpオブジェクトを作成し、 コンストラクタの最初の引数として文字列を渡すことができます 。通常の文字列エスケープ規則(文字列に含まれる場合は、特殊文字の前に\を付ける)が必要になります。

var myStr = 'this.is.a.test';
var reStr = '\\.';
var newStr = myStr.replace(new RegExp(reStr, 'g'), '-');

console.log( newStr );  // "this-is-a-test"
667
VisioN

ただ楽しみのために:

var mystring = "this,is,a,test"  
var newchar = '|'
mystring = mystring.split(',').join(newchar);
145
RobG
var mystring = "this,is,a,test"
mystring.replace(/,/g, "newchar");

グローバル(g)フラグを使う

単純なデモ

41
gdoron