Если вы действительно хотите регулярное выражение, вы можете использовать два в цикле while:
while(num.match(/\d{4}/)) {
num = num.replace(/(\d{3})(,\d|$)/, ',$1$2');
}
И если вы хотите быть модным, вы можете также отформатировать числа с десятичными точками:
while(num.match(/\d{4}(\,|\.)/)) {
num = num.replace(/(\d{3})(,\d|$|\.)/, ',$1$2');
}
Edit:
Вы также можете сделать это с 2 регулярными выражениями без цикла, разбиений, объединений и т. Д .:
num = num.replace(/(\d{1,2}?)((\d{3})+)$/, "$1,$2");
num = num.replace(/(\d{3})(?=\d)/g, "$1,");
Первое регулярное выражение ставит запятую после первых 1 или 2 цифр, если оставшееся количество цифр делится на три. Второе регулярное выражение ставит запятую после каждой оставшейся группы из 3 цифр.
Они не будут работать с десятичными числами, но они отлично работают для положительных и отрицательных целых чисел.
Тестовый вывод:
45
3,856
398,868,483,992
635
12,358,717,859,918,856
-1,388,488,184