JavaScriptでカンマ区切りの数字を表示する方法
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, “,”);
}
これだけで必要なことはすべてです。
この正規表現は、2つの先読みアサーションを使用します。1つは、文字列内の3桁ごとの数字が並んでいる場所を探すための肯定的なアサーションで、もう1つはその場所に正確に3桁の数字しかないことを確認するための否定的なアサーションです。置換式では、カンマをその場所に挿入します。
例えば、”123456789.01″を渡すと、肯定的なアサーションは7の前の位置(”789″が3桁の倍数だから、”678″も、”567″も同様)で一致します。否定的なアサーションは、その3桁の数字の後に数字がないことを確認します。”789″の後にピリオドがあるため、3桁の数字の倍数であり、カンマが挿入されます。”678″は3桁の数字ですが、後に”9″があるため、それら3桁は4桁のグループの一部となり、カンマは挿入されません。”567″も同様です。”456789″は6桁であり、3の倍数なのでその前にカンマが挿入されます。”345678″は3の倍数ですが、後に”9″があるためカンマは挿入されません。などなど。”\B”は、正規表現が文字列の先頭にカンマを挿入するのを防ぎます。
@neu-rahは、この関数が小数点以下3桁以上の数字があるときに不要な場所にカンマを追加すると指摘しました。これが問題であれば、次の関数を使用できます:
function numberWithCommas(x) {
var parts = x.toString().split(“.”);
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, “,”);
return parts.join(“.”);
}