Por fin luego de mucho batallar hemos dado con la contestación de este atascamiento que agunos usuarios de este sitio web han presentado. Si deseas compartir algo puedes dejar tu comentario.
Solución:
Sobre la base de 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! ASP2
Si prefiere no modificar String
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 da el 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! ASP2
JavaScript actual
Desde ES6 en adelante, podría 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 quiere hacer un método de formateo simple por su cuenta, no haga los reemplazos sucesivamente sino simultáneamente.
Debido a que la mayoría de las otras propuestas que se mencionan fallan cuando se reemplaza string del reemplazo anterior también contiene una secuencia de formato como esta:
"01".format("1", "0")
Normalmente esperaría que la salida fuera 10
pero la salida real es 11
. Así que haz un reemplazo simultáneo como en la sugerencia de fearphage.
Es divertido porque Stack Overflow en realidad tiene su propia función de formato para el String
prototipo llamado formatUnicorn
. ¡Intentalo! Entra en la consola y escribe algo como:
"Hello, name, are you feeling adjective?".formatUnicorn(name:"Gabriel", adjective: "OK");
Obtienes esta salida:
Hello, Gabriel, are you feeling OK?
¡Puede usar objetos, matrices y cadenas como argumentos! Obtuve su código y lo modifiqué para producir una nueva versión de String.prototype.format
:
String.prototype.formatUnicorn = String.prototype.formatUnicorn ||
function ()
"use strict";
var str = this.toString();
if (arguments.length)
return str;
;
Tenga en cuenta lo inteligente Array.prototype.slice.call(arguments)
llamada: eso significa que si agrega argumentos que son cadenas o números, no un solo objeto de estilo JSON, obtiene C# String.Format
comportamiento casi exactamente.
"a0bcd1ef".formatUnicorn("FOO", "BAR"); // yields "aFOObcdBARef"
Eso es porque Array
‘s slice
forzará lo que sea que esté en arguments
en una Array
sea original o no, y el key
será el índice (0, 1, 2…) de cada array elemento coaccionado en un string (por ejemplo, “0”, entonces "\0\"
para su primer patrón de expresión regular).
Limpio.
Si te mola el asunto, eres capaz de dejar un ensayo acerca de qué te ha impresionado de este enunciado.