RegExp物件的exec方法

2022-03-07 14:50:45 字數 2749 閱讀 9098

regexp物件的exec方法和string物件的match方法用法十分相似,分兩篇部落格講講其各自的用法和它們之間的異同。

【定義】

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

【語法】

regexpobject.exec(string)
【返回值】返回乙個陣列,其中存放匹配的結果,第一項為與整個模式匹配的字串,其他項是與模式中的捕獲組匹配的字串,且陣列還包含兩個屬性:index和input。其中index表示匹配項在字串中的位置,input表示應用正規表示式的字串。如果未找到匹配,則返回值為 null。

regexp物件是否為全域性正規表示式(是否有全域性標誌g)產生的結果有所不同,因此以下我們分兩種情況講解:

1)regexp物件不是全域性表示式;

2)regexp物件是全域性表示式。

var str="web2.0 .net2.0";

var pattern=/(\w+)(\d)\.(\d)/;//沒有全域性標誌g

console.log(pattern.exec(str));

結果如下:

第一項:web2.0,與整個模式匹配的結果,也就是與/(\w+)(\d)\.(\d)/匹配的結果;

第二項:web,與第乙個匹配組匹配的結果,也就是與(\w+)

匹配的結果;

第三項:2,與第二個匹配組匹配的結果,也就是與(\d)

匹配的結果;

第四項:0,與第三個匹配組匹配的結果,也就是與(\d)(第二個(\d))匹配的結果;

屬性一:index:0,匹配項在字串中的位置,也就是陣列第一項的匹配字串的位置。

屬性二:input:"web2.0 .net2.0",也就是輸入引數str。

以上結果就是每次執行exec方法所得的結果的格式,如果有更多捕獲組,結果中會按順序列出所有的結果。

這個時候,如果我們再執行一次exec方法:

var str="web2.0 .net2.0";

var pattern=/(\w+)(\d)\.(\d)/;//沒有全域性標誌g

console.log(pattern.exec(str));

console.log(pattern.exec(str));

兩次得到的結果會完全相同(設定了全部屬性就會不一樣),也就是當regexp物件沒有全域性標誌時,exec方法每次都只是從頭開始匹配,每次都是返回第乙個匹配項,net2.0儘管也滿足regexp物件,但不會被檢索到。

var str="web2.0 .net2.0";

var pattern=/(\w+)(\d)\.(\d)/g;//有全域性標誌g

console.log(pattern.exec(str));

console.log(pattern.exec(str));

兩次的結果如下:

可以看出兩次結果不同,第二次的結果是在第一次結果的基礎上繼續往後查詢,而不是從頭開始。因此,是否設定全域性標誌g,不會影響第一次的執行結果,但是會決定第二次及以後的結果。我們可以通過regexp的lastindex屬性(表示開始搜尋下乙個匹配項的字元位置)驗證一下:

var str="web2.0 .net2.0";

var pattern=/(\w+)(\d)\.(\d)/g;//有全域性標誌g

var match1=pattern.exec(str);

console.log(pattern.lastindex);//6

var match2=pattern.exec(str);

console.log(pattern.lastindex);//14

可以看到第一次執行exec後,regexp的lastindex為6;第二次執行exec後,regexp的lastindex為14,說明每次搜尋的起點是接在上次的匹配結果之後的。

我們可以對比一下不設定全域性標誌的結果:

var str="web2.0 .net2.0";

var pattern=/(\w+)(\d)\.(\d)/;//沒有全域性標誌g

var match1=pattern.exec(str);

console.log(pattern.lastindex);//0

var match2=pattern.exec(str);

console.log(pattern.lastindex);//0

兩次的lastindex都是0,表示下一次仍然從頭開始搜尋。

1)exec是regexp物件的方法,接受引數為字串;

2)exec執行一次只返回包含乙個匹配項資訊的陣列,陣列格式為[與整個模式匹配的字串,與第乙個捕獲組匹配的字串,與第二個捕獲組匹配的字串,……],陣列有兩個屬性,分別為匹配得到的字串的位置index和輸入引數字串input;

3)不設定全域性標誌g時,exec方法每次都從頭開始檢索,並返回第乙個匹配項;設定全域性標誌g時,exec方法從上次檢索的重點開始檢索,也就是lastindex值的位置。

RegExp物件方法

test 方法 該方法用於檢測乙個字串是否匹配某個模式 基本語法 regexpobject.test str param 引數 str是需要檢測的字串 return 返回值 如果字串str中含有與regexpobject匹配的文字的話,返回true,否則返回false var str longen ...

RegExp物件的三個方法

regexp物件在vbscript中提供正規表示式支援功能,該物件有3個屬性和3個方法。1 execute方法 該方法用於對指定正規表示式進行匹配檢測,其值返回乙個matches集合,其中包含了所有檢測到匹配的match物件。如果沒有檢測到任何匹配則返回一 個空的matches集合。語法格式 reg...

RegExp中的方法

在內建物件regexp中,有兩個方法可以使用正規表示式,分別是test 和exec text 用於判斷正規表示式與指定的字串是否匹配,匹配成功返回true,匹配失敗返回false,此方法經常被應用在條件語句中,在每個regexp例項中,都包含乙個屬性 lastindex,定義檢索的起始位置。當正規表...