js之正則表達式(RegExp對象)


  先看一個很有意思的例子:

 

用字面量的方式定義了一個正則表達式 /\w/g,再重復匹配字符串 ‘ab’ 的時候,出現了結果不唯一的現象。

很多新手都對這種現象感到困惑,難道是正則表達式不穩定嗎?

接下來我們深入學習一下,Javascript中的RegExp對象。

 

RegExp對象的屬性

  1. global:是否全文搜索,默認 false;

  2. ignore case : 是否大小寫敏感,默認是 false;

  3. muitiline: 多行搜索,默認值是 false;

  4. lastIndex: 是當前表達式匹配內容的最后一個字符的下一個位置;

  5. source: 正則表達式的文本字符串,不包括修飾符。

 

前三條屬性作為正則表達式的修飾符是只讀屬性,不可賦值更改,

 

關鍵是這個lastIndex 屬性,使用exec或test方法時才被填入,直接反映到正則表達式對象中。

我們回到一開始的那個例子。

 

用 /\w/g 去匹配字符串 ‘ab’ 的時候,根據屬性的描述,當前表達式匹配內容的最后一個字符的下一個位置(索引)。

 把這個定義拆成三句話:

  1. 當前表達式匹配內容: 'a' ;

  2. 成功匹配內容的最后一個字符: 因為只有一個字符,所以最后一個字符還是 'a' ;

  3. 下一個位置:那就是 ’b‘ 。

所以第一次成功匹配后 正則表達式對象的 lastIndex 應該等於 1,然后用代碼驗證一下:

不難得出,正則全文匹配的時候並不是每一次都是從頭開始的,有一個lastIndex屬性記錄了每次匹配開始的位置

 

到這里文章開頭的問題就迎刃而解了,第三匹配的時候,lastIndex的值為2,而去匹配的字符串中沒有索引為2的字符,自然test方法就返回false,

此時lastIndex會被重置為0,所以第四次的匹配結果又是true了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM