js exec方法詳解

2022-03-29 01:36:51 字數 1526 閱讀 4459

今天檢視jquery原始碼的時候突然被exec方法給弄懵了,特意翻了翻資料詳細了解了下。

1、定義

exec() 方法用於檢索字串中的正規表示式的匹配。

使用方法:var match = regexpobject.exec(string);

這裡主要是看返回值match。

下面是摘自w3school中的解釋:

如果 exec() 找到了匹配的文字,則返回乙個結果陣列。否則,返回 null。此陣列的第 0 個元素是與正規表示式相匹配的文字,第 1 個元素是與 regexpobject 的第 1 個子表示式相匹配的文字(如果有的話),第 2 個元素是與 regexpobject 的第 2 個子表示式相匹配的文字(如果有的話),以此類推。除了陣列元素和 length 屬性之外,exec() 方法還返回兩個屬性。index 屬性宣告的是匹配文字的第乙個字元的位置。input 屬性則存放的是被檢索的字串 string。我們可以看得出,在呼叫非全域性的 regexp 物件的 exec() 方法時,返回的陣列與呼叫方法 string.match() 返回的陣列是相同的。

但是,當 regexpobject 是乙個全域性正規表示式時,exec() 的行為就稍微複雜一些。它會在 regexpobject 的 lastindex 屬性指定的字元處開始檢索字串 string。當 exec() 找到了與表示式相匹配的文字時,在匹配後,它將把 regexpobject 的 lastindex 屬性設定為匹配文字的最後乙個字元的下乙個位置。這就是說,您可以通過反覆呼叫 exec() 方法來遍歷字串中的所有匹配文字。當 exec() 再也找不到匹配的文字時,它將返回 null,並把 lastindex 屬性重置為 0。

也就是說,exec返回的結果為乙個陣列。

2、例項

下面結合jquery中的原始碼對exec的返回結果做一說明:

var quickexpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/;

var match =quickexpr.exec( selector );

//選擇器類似h1的情形

if ( match && (match[1] || !context) )

else

}

quickexpr中包含三個子表示式:(<(.|\s)+>),(.|\s),([\w-]+)。 

match為乙個陣列,

match[0]: 正規表示式要匹配的字串,即selector

match[1]: 與第乙個子表示式匹配的文字,如果selector='hi';  則 match[1]='';

match[2]:與第二個子表示式匹配的文字, 如果selector='hi';  則 match[2]='1';  第二個子表示式(.|\s)匹配包含字元或空格的字串

match[3]:與第三個子表示式匹配的文字,如果selector='#h1';則match[3]='h1';  這也就是為什麼上面可以用document.getelementbyid( match[3] )獲取dom元素的原因了。

列舉方法詳解

package test1 public enum day catch exception ex 1.valueof string name day 返回當前型別指定名稱的列舉常量。名稱必須與在此型別中宣告列舉常量所用的識別符號完全匹配。不允許使用額外的空白字元。引數 name 要返回的常量名稱 返...

Js apply方法詳解

主要我是要解決一下幾個問題 function.call obj,param1 param2 paramn obj 這個物件將代替function類裡this物件 params 這個是乙個引數列表 this 在建立物件在這個時候代表的是student arguments 是乙個陣列,也就是 qian ...

Js apply方法詳解

主要我是要解決一下幾個問題 obj 這個物件將代替function類裡this 物件 args 這個是陣列,它將作為引數傳給function args arguments function.call obj,param1 param2 paramn obj 這個物件將代替function類裡this...