Вы можете сделать это без цикла for, сократив каждый символ на подмассив и затем соединив результаты.
console.log(formatNumber(99123412341234, '-', 4, 2));
/**
* Formats
* @param {int} n - a number
* @param {String} d - delimiter
* @param {int} p - partition size
* @param {int} o - initial offset
*/
function formatNumber(n, d, p, o) {
return n.toString(10).split('').reduce((a, c, i) => {
if (i % p === o) a.push([c]);
else a[a.length - 1].push(c);
return a;
}, [[]]).map(e => e.join('')).join(d);
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
Конечно, если вам нужна версия с регулярным выражением, вы можете попробовать это ...
console.log(formatNumber(99123412341234, '-'));
function formatNumber(n, d) {
return n.toString(10).match(/^(\d{2})(\d{4})(\d{4})(\d{4})$/).slice(1).join(d);
}
.as-console-wrapper { top: 0; max-height: 100% !important; }