JavaScript - 文字列内のすべてのカンマを置換する [重複] 質問する

JavaScript - 文字列内のすべてのカンマを置換する [重複] 質問する

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

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

結果"thisnewcharis,a,test"

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

ベストアンサー1

3番目のパラメータはString.prototype.replace()関数は標準として定義されていなかったため、ほとんどのブラウザでは実装されていません。最終的には削除され、String.prototype.replaceAll()(以下を参照してください)。


最新のソリューション(2022)

使用String.prototype.replaceAll()すべてのブラウザと NodeJS でサポートされるようになりました。

var myStr = "this,is,a,test";
var newStr = myStr.replaceAll(",", "-");

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


昔ながらの方法は、正規表現gグローバル) フラグ

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

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

正規表現に問題がありますか?

正規表現では、エスケープが必要な特殊文字たとえば、ドット ( .) 文字をエスケープする必要がある場合は、/\./正規表現構文ではドットが任意の 1 文字 (行末文字を除く) と一致するため、リテラルを使用する必要があります。

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

function escapeRegex(str) {
    return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
}

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

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

おすすめ記事