replace()一个非常常见的字符串的方法,看似非常简单,但是也有一个小坑在!!!
先看一段常见的replace()的用法:
var str = '123456';
var newStr = str.replace(/\d/,'a');
console.log(newStr); // a23456
由于没有给第一个正则表达式加上全局匹配(g),所以只把匹配到的第一个字符替换,如果我们想将其全部替换的话只需要加上一个g就好了
var str = '123456';
var newStr = str.replace(/\d/g,'a');
console.log(newStr); // aaaaaa
我们还可以为替换内容在加一点花样,比如我们想把“a”,”b”的双引号换位单引号
var str = '"a","b"';
var newStr = str.replace(/"([^"]*)"/g,"'$1'");
console.log(newStr); // 代码并没有错,只是这个编辑器解析的问题
这里的$1是指第一次被匹配到的字符串
其实replace()的第二个参数还可以是一个函数,这个函数接受一个参数,这个参数就是此次匹配到的字符
看下面例子:
var a = ['零','壹','贰','叁','伍','陆','柒',"捌",'玖'];
var n = 112299;
var str = n.toString().replace(/\d/g,function(n){
return a[n];
});
console.log(str); // 壹壹贰贰undefinedundefined
最后来一个将’aaa bbb ccc’的每个首字母转化为大写的代码
var str = 'aaa bbb ccc';
var newStr = str.replace(/\w+/g,function (x) {
return x.substr(0,1).toUpperCase() + x.substr(1);
});
console.log(newStr);