JavaScript equivalente a printf/String.Format

Resuelto Chris S asked hace 15 años • 61 respuestas

Estoy buscando un buen equivalente de JavaScript de C/PHP printf()o para programadores de C#/Java String.Format()( IFormatProviderpara .NET).

Mi requisito básico es un formato de separador de mil para números por ahora, pero sería bueno algo que maneje muchas combinaciones (incluidas fechas).

Me doy cuenta de que la biblioteca Ajax de Microsoft proporciona una versión de String.Format(), pero no queremos toda la sobrecarga de ese marco.

Chris S avatar Mar 04 '09 19:03 Chris S
Aceptado

JavaScript actual

A partir de ES6, puedes usar cadenas de plantilla:

let soMany = 10;
console.log(`This is ${soMany} times easier!`);
// "This is 10 times easier!"

Consulte la respuesta de Kim a continuación para obtener más detalles.


respuesta anterior

Pruebe sprintf() para JavaScript .


Si realmente desea realizar un método de formato simple por su cuenta, no realice los reemplazos sucesivamente, sino simultáneamente.

Porque la mayoría de las otras propuestas mencionadas fallan cuando una cadena de reemplazo de un reemplazo anterior también contiene una secuencia de formato como esta:

"{0}{1}".format("{1}", "{0}")

Normalmente se esperaría que el resultado fuera, {1}{0}pero el resultado real es {1}{1}. Entonces, haga un reemplazo simultáneo como en la sugerencia de Fearphage .

Gumbo avatar Mar 04 '2009 12:03 Gumbo

Aprovechando las soluciones sugeridas anteriormente:

// First, checks if it isn't implemented yet.
if (!String.prototype.format) {
  String.prototype.format = function() {
    var args = arguments;
    return this.replace(/{(\d+)}/g, function(match, number) { 
      return typeof args[number] != 'undefined'
        ? args[number]
        : match
      ;
    });
  };
}

"{0} is dead, but {1} is alive! {0} {2}".format("ASP", "ASP.NET")

salidas

¡ASP está muerto, pero ASP.NET está vivo! ASP {2}


Si prefiere no modificar Stringel prototipo de:

if (!String.format) {
  String.format = function(format) {
    var args = Array.prototype.slice.call(arguments, 1);
    return format.replace(/{(\d+)}/g, function(match, number) { 
      return typeof args[number] != 'undefined'
        ? args[number] 
        : match
      ;
    });
  };
}

Te ofrece lo mucho más familiar:

String.format('{0} is dead, but {1} is alive! {0} {2}', 'ASP', 'ASP.NET');

con el mismo resultado:

¡ASP está muerto, pero ASP.NET está vivo! ASP {2}

fearphage avatar Jan 12 '2011 20:01 fearphage