Реализуйте функцию Sprintf/Printf, которая доступна на большинстве языков под JavaScript.
http://www.webtoolkit.info/javascript-sprintf.html: относительно полное моделирование функций Sprintf. Доступные форматированные подстановки:
1. %% - возвращение к самому знаку процента
2.%B - двоичное число
3.%C - ASCII соответствующие символы
4.%D - целое число
5.%F - номер плавающей запятой
6.%O - восьмиугольный номер
7.%s - строка
8.%x - шестнадцатеричное число (форма строчной буквы)
9.%x - шестнадцатеричные цифры (форма капсулярной буквы)
Параметры, доступные между знаком % и символами подстановочного знака включают (например, % .2f):
1. + (заставляя + и - символы отображаться перед числом в качестве положительных и отрицательных чисел. По умолчанию будут отображаться только отрицательные числа в - символ).
2.- (переменная левая выровненная)
3.0 (используйте 0 в качестве правого выравниваемого символа).
4. [0-9] (установите минимальную ширину переменной)
5 .. [0-9] (установите точность плавающей точки или длину строки)
Кода -копия выглядит следующим образом:
/**
*
* Javascript sprintf
* http://www.webtoolkit.info/
*
*
**/
sprintfwrapper = {
init: function () {
if (typeof arguments == "undefined") {return null; }
if (arguments.length <1) {return null; }
if (typeof arguments [0]! = "String") {return null; }
if (typeof regexp == "undefined") {return null; }
var string = аргументы [0];
var exp = new Regexp (/(%([%] | (/-)? (/+|/x20)? (0)? (/d+)? (/. (/d)?)? ([bcdfosxx])))/g);
VAR Matches = new Array ();
var strings = new Array ();
var convcount = 0;
var stringposstart = 0;
var stringposend = 0;
var matchposend = 0;
var newstring = '';
var match = null;
while (match = exp.exec (string)) {
if (match [9]) {convcount += 1; }
StringPosstart = MatchPosend;
stringposend = exp.lastIndex - match [0] .length;
strings [strings.length] = string.substring (StringPosstart, StringPosend);
matchposend = exp.lastindex;
совпадает [matches.length] = {
Матч: матч [0],
слева: матч [3]? Верно: ложь,
Знак: совпадение [4] || '',
Pad: Match [5] || '',
Мин: матч [6] || 0,
Точность: совпадение [8],
Код: совпадать [9] || '%',
отрицательный: parseint (аргументы [convcount]) <0? Верно: ложь,
Аргумент: строка (аргументы [convcount])
};
}
Strings [Strings.length] = String.Substring (MatchPosend);
if (matches.length == 0) {return String; }
if ((arguments.length - 1) <convcount) {return null; }
var code = null;
var match = null;
var i = null;
for (i = 0; i <matches.length; i ++) {
if (Matches [i] .code == '%') {vipitution = '%'}
иначе if (matches [i] .code == 'b') {
совпадения [i] .argument = string (math.abs (parseint (matches [i] .argument)). ToString (2));
замена = sprintfwrapper.convert (matches [i], true);
}
else if (matches [i] .code == 'c') {
совпадения [i] .argument = string (string.fromCharcode (parseint (math.abs (parseint (matches [i] .argument)))));
замена = sprintfwrapper.convert (matches [i], true);
}
иначе if (matches [i] .code == 'd') {
совпадения [i] .argument = string (math.abs (parseint (matches [i] .argument)));
замена = sprintfwrapper.convert (matches [i]);
}
else if (matches [i] .code == 'f') {
Соответствует [i] .argument = string (math.abs (parsefloat (matches [i] .argument)). tofixed (совпадает [i] .precision? Matches [i] .precision: 6));
замена = sprintfwrapper.convert (matches [i]);
}
else if (matches [i] .code == 'o') {
совпадения [i] .argument = string (math.abs (parseint (matches [i] .argument)). ToString (8));
замена = sprintfwrapper.convert (matches [i]);
}
иначе if (matches [i] .code == 's') {
Матчи [i] .argument = matches [i] .argument.substring (0, Matches [i] .precision? Matches [i] .precision: Matches [i] .argument.length)
замена = sprintfwrapper.convert (matches [i], true);
}
иначе if (matches [i] .code == 'x') {
совпадения [i] .argument = string (math.abs (parseint (matches [i] .argument)). ToString (16));
замена = sprintfwrapper.convert (matches [i]);
}
иначе if (matches [i] .code == 'x') {
совпадения [i] .argument = string (math.abs (parseint (matches [i] .argument)). ToString (16));
замена = sprintfwrapper.convert (matches [i]). touppercase ();
}
еще {
замена = совпадает [i] .match;
}
Newstring += Strings [i];
Newstring += замена;
}
Newstring += Strings [i];
вернуть новость;
},
конвертировать: function (match, nosign) {
if (nosign) {
match.sign = '';
} еще {
match.sign = match.negative? '-': match.sign;
}
var l = match.min - match.argument.length + 1 - match.sign.length;
var pad = new Array (l <0? 0: l) .join (match.pad);
if (! match.left) {
if (match.pad == "0" || nosign) {
return match.sign + pad + match.argument;
} еще {
return Pad + match.sign + match.argument;
}
} еще {
if (match.pad == "0" || nosign) {
return match.sign + match.argument + pad.replace (/0/g, '');
} еще {
return match.sign + match.argument + pad;
}
}
}
}
sprintf = sprintfwrapper.init;
Если вы просто хотите заменить содержимое переменной позиции без дополнительного форматирования, вы можете использовать Printf, представленную в более простых инструментах Yui:
Кода -копия выглядит следующим образом:
Yahoo.tools.printf = function () {
var num = arguments.length;
var ostr = аргументы [0];
для (var i = 1; i <num; i ++) {
var pattern = "// {" + (i-1) + "//}";
var re = new Regexp (шаблон, "g");
ostr = ostr.replace (re, аргументы [i]);
}
вернуть Остр;
}
При его использовании используйте {?}, Чтобы соответствовать его.