@lesonky
2017-01-06T08:32:11.000000Z
字数 1769
阅读 987
JavaScript为了解决拼接字符串的时候混乱的加号,根据printf函数设计了这个buildString函数
//普通版本(建议使用下面的闭包版本)function buildString(str,paraList){//占位符前后修饰符var prefix=" \\{ \\{", surfix="\\} \\} ";//正则表达式字符串var regStr = prefix + "(.+?)" + surfix;//新建正则表达式var regExp = new RegExp(regStr,"mg");if (!str){//没有参数时返回空字符串return "";}else if (str && arguments.length == 1){//只有一个参数时返回本身return str;}else if (arguments.length >= 2 && ((typeof paraList) == "string")){//字符串传参数时转换参数变成数组paraList = Array.prototype.splice.call(arguments,1);return bulidStr(str,paraList);}else{//数组或对象传参数return bulidStr(str,paraList);}//功能函数,替换并返回function bulidStr(str,paraList){var ret = str.replace(regExp,function(full,key){return paraList[key];});return ret;}}
//闭包版本var buildString = function(){//占位符前后修饰符var prefix="\\{\\{", surfix="\\}\\}";//正则表达式字符串var regStr = prefix + "(.+?)" + surfix;//新建正则表达式var regExp = new RegExp(regStr,"mg");//功能函数,替换并返回function bulidStr(str,paraList){var ret = str.replace(regExp,function(full,key){return paraList[key] || "";});return ret;}return function(str,paraList){if (!str){//没有参数时返回空字符串return "";}else if (str && arguments.length == 1){//只有一个参数时返回本身return str;}else if (arguments.length >= 2 && ((typeof paraList) == "string")){//字符串传参数时转换参数变成数组paraList = Array.prototype.splice.call(arguments,1);return bulidStr(str,paraList);}else{//数组或对象传参数return bulidStr(str,paraList);}}}();
使用:
//使用对象传参,占位符使用属性名var id="myID",myclass="myclass";buildString("<div id='{{id}}' class='{{myclass}}' ></div>",{id:id,myclass:myclass});//输出: "<div id='myID' class='myclass' ></div>"//使用数组传参,占位符使用数组下标var id="myID",myclass="myclass";buildString("<div id='{{0}}' class='{{1}}' ></div>",[id,myclass]);//输出: "<div id='myID' class='myclass' ></div>"//使用字符串传参,占位符使用下标,字符串一次传入,位置从0开始var id="myID",myclass="myclass";buildString("<div id='{{0}}' class='{{1}}' ></div>",id,myclass);//输出: "<div id='myID' class='myclass' ></div>"