JavaScript 字符串格式化format、去左ltrim、去rtrim实现

版权声明:本文为博主原创文章,转载请注明出处! https://blog.csdn.net/chuangxin/article/details/86367071

ES6可以用字符串模板功能直接实现字符串format功能,因此本文更多的是基于ES3、ES5,当然ES6也适用。本文讨论实际项目中经常会使用的3个字符串函数实现。

1、格式化字符串, format(str, val1, val2,…)

	var format = function() {
		if(arguments.length == 0) return null;
		var str = arguments[0], a = arguments.length > 1 ? arguments[1] : null;
		if (! a || typeof a != 'object') {
			for(var i=1;i<arguments.length;i++) {
				var re = new RegExp('\\{' + (i-1) + '\\}','gm');
				str = str.replace(re, arguments[i]);
			}
		} else {	//对象格式化.
			var r = new RegExp('\\{([\\s\\S]+?)\\}','gm'), b = null, _str = str;
			while((b = r.exec(_str)) !== null) {
				str = str.replace(b[0], a[b[1]]);
			}
		}
		return str;
	}
	//
	console.log(format("Name: {0}, age: {1}", "老马历写记", 30));
	console.log(format("Name: {name}, age: {age}", {name: "老马历写记", age:30}));	

实现原理:正则替换,支持2种格式化方式:
1)数字索引:format(“Name: {0}, age: {1}”, “老马历写记”, 30)
2)对象key索引:format(“Name: {name}, age: {age}”, {name: “老马历写记”, age:30})

2、去左、右字符串,实现方式1:正则替换

	var ltrim = function(str) {
	    var i, c = arguments.length > 1 ? arguments[1] : ' ';
	    str += '';
	    var reg=new RegExp('^('+c+')*','g');
	    return str.replace(reg, "");
	}, rtrim = function(str) {
	    var i, c = arguments.length > 1 ? arguments[1] : ' ';
	    str += '';
	    var reg=new RegExp('('+c+')*$','g');
	    return str.replace(reg, "");
	};
	//
	var str = "aabbbcccc#..";
	console.log("ltrim: ", ltrim(str, 'aa'));	\\'bbbcccc#..'
	console.log("rtrim: ", rtrim(str, '..'));	\\''
	console.log("rtrim: ", rtrim(str, '\\.\\.'));	\\'aabbbcccc#'

代码分析:
实现原理,正则替换,实现代码量较少,但是实际使用中有风险:

console.log("rtrim: ", rtrim(str, ‘…’)); \’’,特殊字符没有特殊处理,导致结果不是期望输出

3、去左、右字符串,实现方式2:循环替换

	var rtrim2 = function(str, end) {
		end = end || ' ';
		var pos = -1;
		while((pos = str.lastIndexOf(end)) > -1) {
			str = str.substring(0, pos);
			str = rtrim2(str, end);
		}
		return str;
	};
	console.log("rtrim2: ", rtrim2(str, '..'));

代码分析:
实现原理:lastIndexOf查找,截取,代码看上去有点low,但使用安全,不会问题。

4、总结

本文讲述了字符串2种格式化方式实现,字符串去左、去右子串的2种实现方式,当然不排除有更好的处理方式,本文仅供参考。

猜你喜欢

转载自blog.csdn.net/chuangxin/article/details/86367071