1 match
match为字符串的匹配方法
match全局匹配时其输出元素中将包含所有的匹配项
2 exec
exec为正则的方法
exec中不管是不是全局的匹配,只要没有子表达式,其返回的都只有一个元素,如果是全局匹配,可以利用lastIndex进行下一个匹配,匹配成功后lastIndex的值将会变为上次匹配的字符的最后一个位置的索引。在设置g属性后,虽然匹配结果不受g的影响,返回结果仍然是一个数组(第一个值是第一个匹配到的字符串,以后的为分组匹配内容),但是会改变index和 lastIndex等的值,将该对象的匹配的开始位置设置到紧接这匹配子串的字符位置,当第二次调用exec时,将从lastIndex所指示的字符位置 开始检索。同样match方法在设置了g属性后,也会改变index和lastIndex的值,但是是一次性的。无法像exec那样能逐过程累积,因此无 法累积获取下一次检索的位置。
废话不多说看招
var str = '<div><span>你好</span></div>'; //声明了一段html字符串
var reg = /<([a-z]+)/g; //我想要其中的以<开始后面跟最少一个字母 的字符串
/*match一下把所有符合结果的标签都给找出来了*/
console.log(str.match(reg)); //match打印结果----------------["<div", "<span"]
/*而exec只找了一次 数组的第一项为全部匹配结果就是/<([a-z]+)/的匹配结果、后面的第二项为/([a-z]+)/
的匹配结果、index为当前匹配的的下标、input 为匹配的字符串
*/
console.log(reg.exec(str)); //exec打印结果-----------------["<div", "div", index: 0, input: "<div><span>你好</span></div>"]
reg.lastIndex;//设置下一次开始下标 已经匹配过的将不会再匹配,
//比如上一次匹配到字符串第5到第7个字符找到了匹配项,那么下次将从第7个字符之后匹配下一个
console.log(reg.exec(str)); //exec再次打印结果------["<span", "span", index: 5, input: "<div><span>你好</span></div>"]
//细心的同学可以发现这一次的index下标变了,利用这一特性我们可以写一个while循环来找到所有的匹配项 循环条件为 当 (tag = reg.exec(html))!=null的时候;