Equivalente de String.format en jQuery
Estoy intentando mover un código JavaScript de MicrosoftAjax a JQuery. Utilizo los equivalentes de JavaScript en MicrosoftAjax de los métodos .net populares, por ejemplo, String.format(), String.startsWith(), etc. ¿Existen equivalentes en jQuery?
El código fuente de ASP.NET AJAX está disponible para su referencia, por lo que puede seleccionarlo e incluir las partes que desea seguir usando en un archivo JS separado. O puede transferirlos a jQuery.
Aquí está la función de formato...
String.format = function() {
var s = arguments[0];
for (var i = 0; i < arguments.length - 1; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, arguments[i + 1]);
}
return s;
}
Y aquí están las funciones prototipo de termina con y comienza con...
String.prototype.endsWith = function (suffix) {
return (this.substr(this.length - suffix.length) === suffix);
}
String.prototype.startsWith = function(prefix) {
return (this.substr(0, prefix.length) === prefix);
}
Esta es una variación más rápida/simple (y prototípica) de la función que publicó Josh:
String.prototype.format = String.prototype.f = function() {
var s = this,
i = arguments.length;
while (i--) {
s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]);
}
return s;
};
Uso:
'Added {0} by {1} to your collection'.f(title, artist)
'Your balance is {0} USD'.f(77.7)
Lo uso tanto que le puse el alias just f
, pero también puedes usar el más detallado format
. p.ej'Hello {0}!'.format(name)
Muchas de las funciones anteriores (excepto la de Julian Jelfs) contienen el siguiente error:
js> '{0} {0} {1} {2}'.format(3.14, 'a{2}bc', 'foo');
3.14 3.14 afoobc foo
O, para las variantes que cuentan hacia atrás desde el final de la lista de argumentos:
js> '{0} {0} {1} {2}'.format(3.14, 'a{0}bc', 'foo');
3.14 3.14 a3.14bc foo
Aquí hay una función correcta. Es una variante prototípica del código de Julian Jelfs, que hice un poco más estricto:
String.prototype.format = function () {
var args = arguments;
return this.replace(/\{(\d+)\}/g, function (m, n) { return args[n]; });
};
Y aquí hay una versión un poco más avanzada de la misma, que le permite escapar de las llaves duplicándolas:
String.prototype.format = function () {
var args = arguments;
return this.replace(/\{\{|\}\}|\{(\d+)\}/g, function (m, n) {
if (m == "{{") { return "{"; }
if (m == "}}") { return "}"; }
return args[n];
});
};
Esto funciona correctamente:
js> '{0} {{0}} {{{0}}} {1} {2}'.format(3.14, 'a{2}bc', 'foo');
3.14 {0} {3.14} a{2}bc foo
Aquí hay otra buena implementación de Blair Mitchelmore, con un montón de características adicionales interesantes: https://web.archive.org/web/20120315214858/http://blairmitchelmore.com/javascript/string.format
Creó una función de formato que toma una colección o una matriz como argumentos
Uso:
format("i can speak {language} since i was {age}",{language:'javascript',age:10});
format("i can speak {0} since i was {1}",'javascript',10});
Código:
var format = function (str, col) {
col = typeof col === 'object' ? col : Array.prototype.slice.call(arguments, 1);
return str.replace(/\{\{|\}\}|\{(\w+)\}/g, function (m, n) {
if (m == "{{") { return "{"; }
if (m == "}}") { return "}"; }
return col[n];
});
};