首頁  >  文章  >  web前端  >  lastIndex與正規表示式的關係

lastIndex與正規表示式的關係

php中世界最好的语言
php中世界最好的语言原創
2018-03-29 11:02:351788瀏覽

這次帶給大家lastIndex與正規表示式的關係,使用lastIndex與正規表示式的注意事項有哪些,以下是實戰案例,一起來看一下。

前言

今天遇到一個問題,用正規表示式去檢查同一個字串時,交替傳回true和false。無奈之下,重新翻了翻權威指南,發現罪魁禍首原來是lastIndex。可在控制台嘗試下

let reg = /[\d]/g
//undefined
reg.test(1)
//true
reg.test(1)
//false

lastIndex

#lastIndex在權威指南中是如下解釋:它是一個可讀/寫的整數。如果匹配模式帶有g修飾符,這個屬性儲存在整個字串中下次索引的開始位置,這個屬性會被exec()和test()用到。還是上面的例子,觀察下lastIndex屬性

let reg = /[\d]/g  //有修饰符g
//undefined
reg.lastIndex
//0
reg.test(1)   
//true
reg.lastIndex  //匹配一次后,lastIndex改变
//1
reg.test(1)  //从index 1 开始匹配
//false
reg.lastIndex
//0
reg.test(1)
//true
reg.lastIndex
//1

第一次使用test()匹配成功後,lastIndex被設為匹配到的結束位置,就是1;第二次再test()時,從index 1 開始匹配,匹配失敗,lastIndex重設為0 。這樣就造成了符合結果與預期不符

解決

#1、不使用g 修飾符

reg = /[\d]/
///[\d]/
reg.test(1)
//true
reg.test(1)
//true
reg.lastIndex
//0
reg.test(1)
//true
reg.lastIndex

2、test()之後手動設定lastIndex = 0

#相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

正規表示式的\D元字元(等價於"[^0-9]")使用詳解

常用正規表示式的整理

#

以上是lastIndex與正規表示式的關係的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn