字符串搜索匹配之match&&exec

這裏討論的是字符串搜索匹配時常用的另外兩個API: match exec

  1. str.match(reg)
    如果傳入的參數reg不是一個正則表達式對象,而是字符串,那麼這裏會和search函數一樣通過new RegExp(str)將其隱式轉換成正則表達式。
var  str = '#home#home'
var reg1 = 'home'
var match1 = str.match(reg1)

與下面代碼得到的match2結果一樣:

var  str = '#home#home'
var reg2 = /home/
var match2 = str.match(reg2)

在這裏插入圖片描述
注意這裏的正則表達式並不包含全局標誌g,如果包含的話,得到的結果爲:

var  str = '#home#home'
var reg3 = /home/g
var match3 = str.match(reg3)

在這裏插入圖片描述
所以說,如果想要知道一個元素在字符串中出現的次數,可以用match全局匹配,得到數組的長度就是出現的次數。
以上3例都是匹配成功的例子,如果匹配不成功,則返回null

var  str = '#home#home'
var reg4 = /home1/g
var match4 = str.match(reg4)  //match4的結果爲null

如果匹配規則爲空,即沒有給match方法傳入參數,或者傳入空字符串(’’)則返回結果爲第一項爲空字符串的數組

var  str = '#home#home'
var match4 = str.match() 

結果爲:
在這裏插入圖片描述
如果正則表達式中包含捕獲組,且沒有全局匹配標誌g,那麼:

var  str = '#home#home'
var reg5 = /(#)home/
var match5 = str.match(reg5) 

得到的數組第二個元素是捕獲組捕獲到的結果:
在這裏插入圖片描述
如果包含捕獲組,但是同時也設置了全局標誌,那麼捕獲組會被忽略

var  str = '#home#home'
var reg6 = /(#)home/g
var match6 = str.match(reg6)

得到的結果爲:
在這裏插入圖片描述
總結:使用match方法主要一是可以使用全局標誌g來獲取一個元素在str中出現的次數,二是可以通過捕獲組來獲取子匹配(不能有全局標誌g),其他的功能search方法也可以實現,詳見我的另一篇博文:字符串搜索匹配之 test&search&indexOf

  1. reg.exec(str)
    reg必須是正則對象,無論正則表達式中是否有全局標誌g,均可以獲得和match方法不帶全局標誌g一樣的結果,都是返回第一次匹配的結果。
var  str = '#home#home'
var reg1 = /(#)home/
var reg2 = /(#)home/g
var match1 = reg1.exec(str)
var match2 = reg2.exec(str)

得到的結果均爲:
在這裏插入圖片描述
這裏要注意的一點是,正則表達式帶和不帶全局標誌g在匹配時的不同點在於:帶全局標誌g每次匹配後,匹配位置(lastIndex)變成下次匹配的起始位置。
如果沒有匹配到結果,跟match方法一樣,返回null

var  str = '#home#home'
var reg3 = /(#)home1/
var match3 = reg3.exec(str)  //match3結果爲null

總結:使用exec方法要注意的是如果設置了全局標誌g,則每次的匹配位置lastIndex會改變。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章