1 match
match為字符串的匹配方法
match全局匹配時(shí)其輸出元素中將包含所有的匹配項(xiàng)
2 exec
exec為正則的方法
exec中不管是不是全局的匹配,只要沒有子表達(dá)式搏嗡,其返回的都只有一個(gè)元素,如果是全局匹配套硼,可以利用lastIndex進(jìn)行下一個(gè)匹配,匹配成功后lastIndex的值將會(huì)變?yōu)樯洗纹ヅ涞淖址淖詈笠粋€(gè)位置的索引海渊。在設(shè)置g屬性后角撞,雖然匹配結(jié)果不受g的影響,返回結(jié)果仍然是一個(gè)數(shù)組(第一個(gè)值是第一個(gè)匹配到的字符串褥民,以后的為分組匹配內(nèi)容)季春,但是會(huì)改變index和 lastIndex等的值,將該對(duì)象的匹配的開始位置設(shè)置到緊接這匹配子串的字符位置消返,當(dāng)?shù)诙握{(diào)用exec時(shí)载弄,將從lastIndex所指示的字符位置 開始檢索。同樣match方法在設(shè)置了g屬性后侦副,也會(huì)改變index和lastIndex的值侦锯,但是是一次性的。無法像exec那樣能逐過程累積秦驯,因此無 法累積獲取下一次檢索的位置。
廢話不多說看招
var str = '<div><span>你好</span></div>'; //聲明了一段html字符串
var reg = /<([a-z]+)/g; //我想要其中的以<開始后面跟最少一個(gè)字母 的字符串
/*match一下把所有符合結(jié)果的標(biāo)簽都給找出來了*/
console.log(str.match(reg)); //match打印結(jié)果----------------["<div", "<span"]
/*而exec只找了一次 數(shù)組的第一項(xiàng)為全部匹配結(jié)果就是/<([a-z]+)/的匹配結(jié)果挣棕、后面的第二項(xiàng)為/([a-z]+)/
的匹配結(jié)果译隘、index為當(dāng)前匹配的的下標(biāo)亲桥、input 為匹配的字符串
*/
console.log(reg.exec(str)); //exec打印結(jié)果-----------------["<div", "div", index: 0, input: "<div><span>你好</span></div>"]
reg.lastIndex;//設(shè)置下一次開始下標(biāo) 已經(jīng)匹配過的將不會(huì)再匹配,
//比如上一次匹配到字符串第5到第7個(gè)字符找到了匹配項(xiàng)固耘,那么下次將從第7個(gè)字符之后匹配下一個(gè)
console.log(reg.exec(str)); //exec再次打印結(jié)果------["<span", "span", index: 5, input: "<div><span>你好</span></div>"]
//細(xì)心的同學(xué)可以發(fā)現(xiàn)這一次的index下標(biāo)變了题篷,利用這一特性我們可以寫一個(gè)while循環(huán)來找到所有的匹配項(xiàng) 循環(huán)條件為 當(dāng) (tag = reg.exec(html))!=null的時(shí)候;