String.Format en JavaScript

Cuando trabajas de una manera más intensiva en el lado del cliente empiezas a echar en falta aquellas utilidades disponibles en servidor y que no tenemos por defecto en JavaScript. Una de ellas es el uso de String.Format para poder trabajar de una forma más eficiente con cadenas.
Normalmente, cuando queremos concatenar variables con literales en nuestros scripts solemos hacerlo de la siguiente manera:

"Hi! I'm " + me + " and you can <a href='" + twitter + "'>follow me on Twitter</a> or <a href='" + facebook + "'>Facebook</a>";

Una alternativa para mejorar este tipo de concatenaciones sería la simulación de String.Format, modificando el prototipo de la clase String de JavaScript, con el fin de poder trabajar de una forma más legible y cómoda:

"Hi! I'm {0} and you can <a href='{1}'>follow me on Twitter</a> or <a href='{2}'>Facebook</a> {test}".format(me, twitter, facebook);

La implementación de esta extensión podría ser la siguiente:

String.prototype.format = function () {
    var literal = this;

    for (var i = 0; i < arguments.length; i++) {
        var regex = new RegExp('{' + i + '}', 'g');
        literal = literal.replace(regex, arguments[i]);
    }

    return literal;
};

Lo único que hacemos en la función format es tomar como literal la cadena que llama a dicho método y recorrer cada uno de los argumentos para poder reemplazar todas las coincidencias con la ayuda de la expresión regular ‘{posicion del argumento}. Con el flag g conseguimos reemplazar todas las coincidencias que encuentre para un mismo argumento, si es que hacemos uso repetido del mismo valor en distintos sitios del literal.

Otra opción es hacer uso de la librería JavaScript sprintf() la cual es mucho más elaborada 🙂

Espero que sea de utilidad.

¡Saludos!