正则的捕获有两种:
1.exec方法
2.字符串的match方法
3.字符串的replace方法:将原有的字符替换成我们新的字符
在不使用正则的情况下,使用replace只能替换正则中的一个
在replace当中我们可以一次批量的把所有正则匹配的内容都替换掉-- replace中是支持正则的
练习:
1.获取一个字符串中出现次数最多的字符,并且获取出现的次数
// 1)获取每一个字符出现的次数
var str = "zhangsanpeixunyangfanqihang";
var obj = {};
str.replace(/[a-z]/gi,function(){
var val = arguments[0]
obj[val] >= 1 ? obj[val] +=1 : obj[val] = 1
})
console.log(obj)
// 2)获取最多出现的次数
var maxNum = 0;
for (var key in obj) {
obj[key] > maxNum ? maxNum = obj[key] : null;
}
// 3)把所有符合出现maxNum次数的都获取到
var ary = [];
for (var key in obj) {
obj[key] === maxNum ? ary.push(key) : null;
}
console.log("整个字符串中出现次数最多的字符是:" + ary.toString() + ",出现了" + maxNum + "次")
2.模板引擎实现的初步原理
var str = "my name is {0},my age is {1},i come form {2},i love {3}~";
var ary = ["崔俊丽","18","china","JavaScrpt"];
str = str.replace(/{(d+)}/g,function () {
return ary[arguments[1]];
// return ary[RegExp.$1]; // 在IE下是不兼容的
});
console.log(str);
思考题:
1."2015-9-22 13:10:0" 替换成"2015年09月22日 13时10分00秒"
2.把一个字符串中所有单词的首字母大写 “zhang san pei xun” -> "Zhu Feng Pei Xun"
3.需求:queryURLParameter
把url中的参数都获取到,并且保存成如下格式?
方式一:
var str = "http://kbs.sports.qq.com/kbsweb/game.htm?mid=10000&cid=1467086&app=1.0";
var obj = { mid: "10000", cid:"1467986", app:"1.0" } var reg = /([^?=&]+)=([^?=&]+)/g; var obj = {}; var res = reg.exec(str); while (res) { obj[res[1]] = res[2]; res = reg.exec(str); } console.log(obj);
方式二:
var str = "http://kbs.sports.qq.com/kbsweb/game.htm?mid=10000&cid=1467086&app=1.0";
var obj = {}; str.replace(reg,function() { obj[arguments[1]] = arguments[2]; }); console.log(obj);