正規表示式 lastIndex屬性

admin發表於2018-09-06

lastIndex屬性可以返回或者設定正規表示式新的一次匹配開始的位置。

特別說明:

(1).正規表示式必須執行全域性匹配(g),否則lastIndex屬性不會有效。

(2).此屬性僅對exec方法與test方法有效。

關於lastIndex屬性在exec方法與test方法方法的具體表現本文不做詳細介紹,可以參閱相關文章。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
RegExp.lastIndex

此屬性的預設值是0,也就是字串中的第一個字元。

字串計算字元位置的方式與陣列類似,是從0開始的。

瀏覽器支援:

(1).IE瀏覽器支援此屬性。

(2).edge瀏覽器支援此屬性。

(3).火狐瀏覽器支援此屬性。

(4).谷歌瀏覽器支援此屬性。

(5).opera瀏覽器支援屬性。

(6).safria瀏覽器支援此屬性。

例項程式碼:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="螞蟻部落";
let reg=/部/;
console.log(reg.test(str));
console.log(reg.lastIndex);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/003113hjz5chhs1ci3o3zs.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上面程式碼使用的是非全域性匹配,所以導致lastIndex屬性失效,返回值並不準確。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="螞蟻部落";
let reg=/部/g;
console.log(reg.test(str));
console.log(reg.lastIndex);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/003153w6qos68h8kmdq6jq.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼中,正則採用全域性匹配,那麼lastIndex屬性可以返回正確的值。

正規表示式可以匹配字元"部",它的位置是2,那麼正則開始下一次匹配的位置就是2+1=3。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="antzone";
let reg=/n/g;
reg.lastIndex=3;
console.log(str.match(reg));
console.log(reg.lastIndex);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/003229sqj8l6uhem8rooju.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

lastIndex屬性僅對exec方法與test方法有效。

所以上述程式碼中,lastIndex屬性的設定對於match方法沒有任何效果。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="antzone";
let reg=/n/g;
reg.lastIndex=3;
console.log(reg.test(str));
console.log(reg.lastIndex);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/003308nvpmvp111pexbo1n.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

對上述程式碼分析如下:

(1).正規表示式可以匹配字元n,並採用全域性匹配。

(2).reg.lastIndex=3設定正規表示式下一次匹配的開始位置為3。

(3).test方法從位置3開始進行嘗試匹配,最終在位置5處,匹配成功,那麼下一次匹配就是從6處開始。

(4).那麼很自然reg.lastIndex屬性的返回值是6。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="antzone";
let reg=/n/g;
reg.lastIndex=6;
console.log(reg.test(str));
console.log(reg.lastIndex);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/003351dy3dcqzl9wdd4hd7.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

如果test方法或者exec方法匹配失敗,那麼lastIndex屬性會被重置為0。

相關文章