Números Comfy

Nunca he usado los pocos scripts que he visto que agregan comas a los números porque generalmente quiero aplicar la funcionalidad a bloques completos de texto. Tener que sacar números, agregar comas y luego volver a colocarlos se convierte en una tarea innecesariamente compleja sin un método que pueda hacer esto de una sola vez. Por lo tanto, este es mi intento de hacer esto (si las expresiones regulares de JavaScript son compatibles con LookBehind, podría ser aún más corto):

String.prototype.commafy = function () {
	return this.replace(/(^|[^\w.])(\d{4,})/g, function($0, $1, $2) {
		return $1 + $2.replace(/\d(?=(?:\d\d\d)+(?!\d))/g, "$&,");
	});
}

Number.prototype.commafy = function () {
	return String(this).commafy();
}

Aquí hay un par de ejemplos de cómo se puede usar esto:

(1000).commafy();
// Output: 1,000

var data = '1\n' +
	'10\n' +
	'100\n' +
	'1000\n' +
	'10000\n' +
	'100000\n' +
	'1000000\n' +
	'12345678901234567890\n' +
	'1000.99\n' +
	'1000.9999\n' +
	'.9999\n' +
	'-1000\n' +
	'$1000\n' +
	'"1000"\n' +
	'1000MHz\n' +
	'Z1000';

data.commafy();
/* Output:
1
10
100
1,000
10,000
100,000
1,000,000
12,345,678,901,234,567,890
1,000.99
1,000.9999
.9999
-1,000
$1,000
"1,000"
1,000MHz
Z1000
*/

Tenga en cuenta que agrega comas a los números seguidos de caracteres no numéricos, pero evita agregar comas a los números inmediatamente precedidos por un punto (punto decimal), una letra o un guión bajo. Y como se muestra, esto se puede aplicar a números individuales o bloques completos de texto.

Este es un buen ejemplo de cómo las expresiones regulares pueden ayudar a acortar y simplificar el código, incluso en lugares en los que inicialmente no pensaría usarlas.

Editar: Incluí una implementación alternativa del código anterior en mi publicación Mimicking Lookbehind in JavaScript, que invierte temporalmente la cadena para permitir un enfoque simplificado.