此方法使用字符串分割进行的内容替换,可解决使用正则表达式替换时的$1、$2....问题
/**
* 字符串模板格式化
* 用法1:
* var s = "<div>成功&{successNum}个</div>";
* s.format({successNum:20}); //s= "<div>成功20个</div>";
* 用法2:
* var s = "<option value="&{value}">&{text}</option>";
* s.format([{value:1,text:'a'},{value:2,text:'b'}]); //s= "<option value="1">a</option><option value="2">b</option>";
*
*/
var formatStrReplace = function(data, result){
for(var key in data){
result = returnStringReplaceResult(result, '&{' + key + '}', data[key], false);
}
return result;
};
//字符串替换
/*
*字符串内容替换,strings=原字符串,replaces=原字符串中要替换的字符,replaceResult=更换掉要替换的字符,istoLowerCase=是否要忽略大小写(true=是,false=否);
* 如:returnStringReplaceResult('abc','A','d',true) => 'dbc';
* returnStringReplaceResult('abc','A','d',false) => 'abc';
* istoLowerCase不传则默认false,istoLowerCase只能传boolean类型,如果是其他的也默认为false
* 如果replaceResult参数不传,则默认把要替换的值去除,('abc','a','',false) => 'bc'
* */
var returnStringReplaceResult = function (strings, replaces, replaceResult, istoLowerCase) {
if(!strings || !replaces) return strings;
var toLowerCaseCategoryNames = istoLowerCase === true ? strings.toLowerCase() : strings,//转小写之后的数据字段
toLowerCaseVal = istoLowerCase === true ? replaces.toLowerCase() : replaces,//转小写之后的查询字段
newStrArr = toLowerCaseCategoryNames.split(toLowerCaseVal), //根据查询字段把转了小写之后的数据字段进行分割
joinStr = '',//用来拼接转了小写之后的数据字段,主要是为了截取原数据字段中的内容
dataStr = '',//用来接收截取出来的原数据字段内容
endStr = '',//用来接收拼接完之后的原数据字段
length = newStrArr.length;
for(var i = 0; i < length; i++){
dataStr = strings.substring(joinStr.length, joinStr.length + newStrArr[i].length);//这里每次循环获取到的内容就是没有转小写的原数据字段
joinStr += newStrArr[i]; //这里把当前循环数组下标中转了小写的内容拼接起来
if(i === (length-1)){
endStr += dataStr;
}else{
endStr += dataStr + (replaceResult !== null && replaceResult !== undefined ? replaceResult : ''); //把更换的内容拼接
}
joinStr += toLowerCaseVal; //把上面拼接的循环内容在加上要查询的内容,用来下次循环的时候截取下一段内容
}
return endStr;
};
字符串模板替换
于 2020-07-25 23:14:09 首次发布