title: Add commas or spaces to group every three digits
body: <p>I have a function to add commas to numbers:</p>
  
  <pre><code>function commafy( num ) {
    num.toString().replace( /\B(?=(?:\d{3})+)$/g, "," );
  }
  </code></pre>
  
  <p>Unfortunately, it doesn't like decimals very well. Given the following usage examples, what is the best way to extend my function?</p>
  
  <pre><code>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"
  </code></pre>
  
  <p>Presumably the easiest way is to first split on the decimal point (if there is one). Where best to go from there?</p>