JS は C# 文字列フォーマット操作をシミュレートします
/*** ** 功能: 字符串格式化替换操作 ***/ String.prototype.format = function () { var args = arguments; return this.replace(/\{(\d+)\}/g, function (m, i) { return args[i]; }); }
js は、C# と同様の文字列処理関数 format() を実装します。
C# に詳しい方は format() というメソッドがあることをご存知かと思いますが、それを真似してこの関数を JavaScript で実装してみましょう。
コード例は次のとおりです:
String.prototype.format=function(args){ if(arguments.length>0){ var result=this; if(arguments.length==1&&typeof(args)=="object"){ for(var key in args){ var reg=new RegExp("({"+key+"})","g"); result=result.replace(reg, args[key]); } } else{ for(var i=0;i<arguments.length;i++){ if(arguments[i]==undefined){ return ""; } else{ var reg=new RegExp ("({["+i+"]})","g"); result = result.replace(reg, arguments[i]); } } } return result; } else{ return this; } } var fistStr="{0}欢迎您,希望大家能够得到想要的{1}"; var secondStr="{webName}欢迎您,希望大家能够得到想要的{favoriate}"; var firstOut=fistStr.format("","东西"); var secondOut=secondStr.format({webName:"",favoriate:"东西"}); console.log(firstOut); console.log(secondOut);
上記のコードは、私たちが望む効果を実現します。ここでは、その実装プロセスを紹介します。
1. 実装原則:
原理は比較的簡単です。詳しくはコードのコメントを参照してください。正規表現を使用して置換する文字列を検索し、コード内で指定された内容の一部は文字列リテラルであり、一部はオブジェクト属性値です。
2. コードのコメント:
1.String.prototype.format=function(args){{})、プロトタイプ オブジェクトを通じてインスタンス メソッド形式を String オブジェクトに追加します。このメソッドは文字列を処理するために使用されます。
2.if(arguments.length>0)、渡されたパラメータの数が 0 より大きい場合。
3.var result=this、thisの参照を変数resultに代入します。
4.if(arguments.length==1&&typeof(args)=="object")、渡されたパラメータがオブジェクト リテラルかどうかを判断するために使用されます。
5.for(var key in args)、オブジェクト リテラル内の属性を走査します。
6.var reg=new RegExp("({" key "})","g")、指定された文字列と一致するために使用されます。
7.result=result.replace(reg,args[key])、一致する文字列を属性値に置き換えます。
8.else{}、渡されたものがオブジェクト リテラルでない場合。
9.for(var i=0;i
10.if(arguments==unknown)、未定義の場合は空の文字列を返します。
11.var reg=new RegExp("({[" i "]})","g")、指定された文字列と一致するために使用されます。
12.result=result.replace(reg,arguments)、置換します。
13.return result、置換された文字列を返します。
14.これを返します。パラメータが渡されない場合は、文字列自体が返されます。