複数のコンマを含む文字列があり、文字列置換メソッドは最初のコンマのみを変更します。
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"