JavaScriptの下でほとんどの言語で利用可能なSprintf/printf関数を実装します。
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-六分位数字(capsular文字形式)
%記号とワイルドカード文字の間で利用可能なオプションには、(たとえば、%.2fなど)が含まれます。
1. +( +および - 記号を正と負の数として数の前に表示することを強制します。デフォルトでは、負の数のみが - シンボルに表示されます)
2.-(可変左アライメント)
3.0(0を右に調整されたパディングキャラクターとして使用)
4. [0-9](変数の最小幅を設定)
5 .. [0-9](フローティングポイントの精度または文字列の長さを設定)
コードコピーは次のとおりです。
/**
*
* JavaScriptSprintf
* 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 = arguments [0];
var exp = new regexp(/(%([%] |(/ - )?(/+|/x20)?(0)?(/d+)?(/d(/d))?([bcdfosxx]))/g);
var matches = new array();
var strings = new Array();
var Convcount = 0;
var stringpossstart = 0;
var stringposend = 0;
var matchposend = 0;
var Newstring = '';
var match = null;
while(match = exp.exec(string)){
if(match [9]){Convcount += 1; }
stringpossstart = mattposend;
stringposend = exp.lastindex -match [0] .length;
文字列[strings.length] = string.substring(stringpossstart、stringposend);
mattposend = exp.lastindex;
一致[matches.length] = {
一致:マッチ[0]、
左:一致[3]? True:False、
記号:一致[4] || ''、
パッド:[5] ||を一致させます''、
min:match [6] || 0、
精度:マッチ[8]、
コード:一致[9] || '%'、
ネガティブ:parseint(arguments [Convcount])<0? True:False、
議論:文字列(引数[Convcount])
};
}
文字列[strings.length] = string.substring(matchposedend);
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([i] .code == '%'){subrition = '%'}
else if(matches [i] .code == 'b'){
一致[i] .argument = string(math.abs(parseint(matches [i] .argument))。toString(2));
subsurity = sprintfwrapper.convert(matches [i]、true);
}
else if([i] .code == 'c')を一致させる){
一致[i] .argument = string(string.fromCharcode(parseint(math.abs(matches [i] .argument)))));
subsurity = sprintfwrapper.convert(matches [i]、true);
}
else if([i] .code == 'd'を一致){
一致[i] .argument = string(math.abs(parseint(matches [i] .argument)));
subsurition = sprintfwrapper.convert(matches [i]);
}
else if([i] .code == 'f'を一致){
一致[i] .argument = string(math.abs(parsefloat(matches [i] .argument))。tofixed(matches [i] .precision?mates [i] .precision:6));
subsurition = sprintfwrapper.convert(matches [i]);
}
else if(matches [i] .code == 'o'){
一致[i] .argument = string(math.abs(parseint(matches [i] .argument))。toString(8));
subsurition = sprintfwrapper.convert(matches [i]);
}
else if([i] .code == 's'){
一致[i] .argument = matches [i] .argument.substring(0、mates [i] .precision?mates [i] .precision:matches [i] .argument.length)
subsurity = sprintfwrapper.convert(matches [i]、true);
}
else if(matches [i] .code == 'x'){
一致[i] .argument = string(math.abs(parseint(matches [i] .argument))。toString(16));
subsurition = sprintfwrapper.convert(matches [i]);
}
else if(matches [i] .code == 'x'){
一致[i] .argument = string(math.abs(parseint(matches [i] .argument))。toString(16));
subsurity = sprintfwrapper.convert(matches [i])。touppercase();
}
それ以外 {
代替=一致[i] .match;
}
NewString +=文字列[i];
NewString += Substitution;
}
NewString +=文字列[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;
} それ以外 {
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;
追加のフォーマットなしで位置変数のコンテンツを置き換えるだけの場合、よりシンプルなYUIツールで提供されるprintfを使用できます。
コードコピーは次のとおりです。
yahoo.tools.printf = function(){
var num = arguments.length;
var ostr = arguments [0];
for(var i = 1; i <num; i ++){
var pattern = "// {" +(i-1) + "//}";
var re = new regexp(pattern、 "g");
OSTR = OSTR.REPLACE(RE、引数[i]);
}
ORTRを返します。
}
使用するときは、{?}を使用して一致します。