(一) 初步意義: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.
(
編輯記錄)