Welcome! 登入 註冊
美寶首頁 美寶百科 美寶論壇 美寶落格 美寶地圖

Advanced

JavaScript RegExp 的 exec 函式

JavaScript RegExp 的 exec 函式

分類標籤: 程式設計
(一) 初步意義:RegExp.exec(String) 會找出 String 中 符合 RegExp 的字串

簡單例子:

程式:
myPattern = /a(\d)b/;
myString = 'a1b';
myResult = myPattern.exec(myString);

執行結果:
myResult的內容為 [ 'a1b', '1']
即 myResult[0] = 'a1b' //也就是 myResult[0] 是符合 RegExp 整個條件的字串
myResult[1] = '1' // myResult[1] 是 所指定的 第1個括號裡的 內容



(二) 廣域(global) 的問題
好吧,大部份網站或比較入門的書上就介紹到上面為止,可是如果我們考慮 global 的問題呢? 所謂 global 就是,如果 string 中有兩個以上的地方符合 RegExp 的內容,這兩個以上的地方都要被找到,那 exec 函式 是 怎麼處理的呢??我們再來看一個例子:



比較不簡單的例子:

程式:
myPattern = /a(\d)b/g; //要global,當然 RegExp 定義式中就要指定 g 旗標 (flag)
myString = 'a1b,a2b'; //然後在我們的測試字串裡,也故意做出兩個會符合的地方
myResult = myPattern.exec(myString); //執行 exec 函式

執行結果:
myResult的內容為 [ 'a1b', '1']
即 myResult[0] = 'a1b' //也就是 myResult[0] 是符合 RegExp 整個條件的字串
myResult[1] = '1' // myResult[1] 是 所指定的 第1個括號裡的 內容




重點:執行結果還是只找到一個地方?是的,它只找到一個地方,那exec 有 global的功能嗎? 答案是 yes 它有的,這功能在那裡? 在下面啦,我們先修改一下「比較不簡單的例子」,只多加一行敘述:




比較不簡單的例子的加強版:

程式:
myPattern = /a(\d)b/g;
myString = 'a1b,a2b';
myResult = myPattern.exec(myString); //執行 exec 函式
alert( myResult ); //印出結果為 a1b,1
myResult = myPattern.exec(myString); //重點:再執行一次 exec 函式
alert( myResult ); //印出結果為 a2b,2 <----出來了




所以,要執行第2次,他就會找出第2個,如果還有第3個符合條件的內容,那就再執行第3次,那它是怎麼做到的呢?這跟一個 RegExp的參數(屬性?)有關。





(三) RegExp 的 lastIndex 參數


(我有點事要忙,下次繼續)



Edited 5 time(s). Last edit at 02/26/2010 01:37AM by RandomVariable.
(編輯記錄)