418

複数のコンマを含む文字列があり、文字列置換メソッドは最初のもののみを変更します:

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

結果:"thisnewcharis,a,test"

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

4

3 に答える 3

873

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

最良の方法は、 ( global ) フラグを指定して正規表現を使用することです。g

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"

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

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

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

于 2012-05-15T23:58:44.670 に答える
182

楽しみのために:

var mystring = "this,is,a,test"  
var newchar = '|'
mystring = mystring.split(',').join(newchar);
于 2012-05-16T00:06:01.063 に答える
51
var mystring = "this,is,a,test"
mystring.replace(/,/g, "newchar");

global( g) フラグを使用する

簡単なデモ

于 2012-05-15T23:59:03.853 に答える