Přidejte čárky nebo mezery do skupiny každé tři číslice

Mám funkci pro přidání čárek k číslům:

function commafy( num ) {
  num.toString().replace( /B(?=(?:d{3})+)$/g, "," );
}

Bohužel nemá moc rád desetinná místa. Vzhledem k následujícím příkladům použití, jaký je nejlepší způsob rozšíření mé funkce?

commafy( "123" )                 // "123"
commafy( "1234" )                // "1234"
                                 // Don't add commas until 5 integer digits
commafy( "12345" )               // "12,345"
commafy( "1234567" )             // "1,234,567"
commafy( "12345.2" )             // "12,345.2"
commafy( "12345.6789" )          // "12,345.6789"
                                 // Again, nothing until 5
commafy( ".123456" )             // ".123 456"
                                 // Group with spaces (no leading digit)
commafy( "12345.6789012345678" ) // "12,345.678 901 234 567 8"

Pravděpodobně nejjednodušší způsob je nejprve dělit na desetinnou čárku (pokud existuje). Kam se odtud nejlépe vydat?

Odpověď

Stačí rozdělit na dvě části pomocí znaku „.“ a naformátovat je jednotlivě.

function commafy( num ) {
    var str = num.toString().split('.');
    if (str[0].length >= 5) {
        str[0] = str[0].replace(/(d)(?=(d{3})+$)/g, '$1,');
    }
    if (str[1] && str[1].length >= 5) {
        str[1] = str[1].replace(/(d{3})/g, '$1 ');
    }
    return str.join('.');
}