正则-分组捕获实例分析
2019-06-16 本文已影响0人
子心_
在正则捕获的时候,我们添加分组,不仅仅可以把大正则匹配的内容捕获,而且还可以把小分组代表的子正则匹配的内容一起捕获出来。
(?:xxx)分组只匹配不捕获
var str = "my name is {0}, my age is {1}, i come from {2}, i love {3}~~~";
var ary = ["易文", 28, "湖南", "javaScript"];
// {0} ---> ary[0] "易文"
// {1} --> ary[1] 28
// ...我们在捕获的时候,不仅要获取{0},而且还要获取里面的数字0,并且每一次exec执行的时候, 同时获取这两个
var reg = /{(\d+)}/g;
console.log(reg.exec(str)); // -> res=["{0}", "0",...]
// res[1]获取的是最小正则捕获的内容 ary[res[1]]代表的是对应数组中的内容,我们用这个内容把大正则捕获的res[0]"{0}"替换掉即可。
replace字符串实现替换的一个方法,但是一般情况下,执行一次只替换一个,我们为了替换换所有的符合的,需要用正则来处理:
var str = "beijingnanjing beijinghuangyingni";
str = str.replace(/beijing/g, "珠峰"); //在整个字符串中,把符合正则的部分替换成“北京”
// 如果你想替换的话,首先你先要把"beijing"获取到,然后再替换-->如果replace第一个参数是正则,那么涉及到了正则的捕获
/*
lastIndex = 0
首先捕获"beijing",捕获一次,replace就执行一次替换的操作
lastIndex = 7
再次捕获"beijing", 捕获一次,replace就执行一次替换的操作
lastIndex = 21
捕获不到内容了,结果为null,replace就不再执行替换的操作了
*/
如上述所说,我们当replace执行两次,相当于第二个参数function也执行两次,在每一次function执行的时候,在函数中return后面返回的是啥,就把捕获的内容替换成啥:
str = str.replace(/beijing/g, function (content, index, input) {
// console.log(arguments);
// arguments当前函数的集合,我们发现和正则exec每一次捕获的结果很相似,这个函数会默认有三个参数:
// content:每一次捕获的内容
// index: 每一次捕获的开始索引
// input: 原始字符串
return content.toUpperCase();
});
console.log(str);