高级查找: 即查找每个关键词内容,又查找位置
var arr=reg.exec(str);
表示:在str中查找下一个符合reg规则的关键词的内容和位置,没有就返回null
固定套路: 查找每个关键词的内容和位置
var arr=null;
while((arr=reg.exec(str))!=null){
arr: ["关键词",$1,$2,... index:位置] //返回的是一个arr数组
0
}
原理: reg对象中有一个lastIndex=0属性,规定了exec下次开始查找的位置——不用手动维护
exec每执行一次,做三件事:
1.将关键词内容,放入数组第0个元素
2.将关键词位置,放入数组的index属性
3.自动将reg的lastIndex+关键词的长度
导致下次自动跳过关键词,找下一个
强调: 也是一个一个找,每找一个新的,都会替换数组中旧的关键词。
简写: 如果只获得分组子内容,不需要完整关键词
RegExp.$n -> 可获得本次查找到的第n个分组的子内容
while(reg.exec(str)!=null){
RegExp.$n
}
例:
(1)//查找每个关键词的内容和位置
var str="No zuo no die,No can no bibi";
var reg=/no/ig;
var arr=null;
while((arr=reg.exec(str))!=null){
console.log(arr);
console.log(
"在位置"+arr.index+"发现敏感词"+arr[0]);
console.log("下次从"+reg.lastIndex+"开始");
}
(2)如果只获得分组子内容,不需要完整关键词
var html='<a name="#top"></a><h1>Welcome</h1><ul><li><a class="curr" href="http://tmooc.cn">go to tmooc</a></li><li><a href="http://tedu.cn" target="_blank">go to tedu</a></li></ul>';
var reg=/<as+[^>]*?href="([^"]*?)"/ig;
while(reg.exec(html)!=null){
console.log(RegExp.$1);
}