2018年8月19日 星期日

JavaScript RegExp 的 lastIndex 屬性

JavaScript 正規表示式 RegExp 物件,當有使用「g」global match 參數時,
會有一個 lastIndex  屬性,記錄上一次批配到的字串,後面的位置(預設值為0)。

RegExp.lastIndex  屬性:
  1. RegExp.exec()、RegExp.test(),都是以 lastIndex 當作匹配比對起點
  2. 當匹配比對失敗,lastIndex 會重設為 0
  3. RegExp.lastIndex 值可手動設定

範例:
var str = 'abcde';
var RegExpObj = new RegExp('b', 'g');
RegExpObj.lastIndex; //0  預設值為 0

//第一次比對,比對成功,lastIndex 變為 2
RegExpObj.test(str); // true
RegExpObj.lastIndex; //2

//第二次比對,從字串位置 2 開始比對,比對失敗,lastIndex 自動重置為 0
RegExpObj.test(str); // false
RegExpObj.lastIndex; //0

//第三次比對,又從字串位置 0 開始比對,比對成功,lastIndex 變為 2
RegExpObj.test(str); // true
RegExpObj.lastIndex; //2

//手動將 lastIndex 設為 1,再次比對,可成功比對到字串位置 1 的 「b」
RegExpObj.lastIndex=1; 
RegExpObj.lastIndex; //1
RegExpObj.test(str); // true


參考:
JavaScript lastIndex 属性
regexp.lastIndex - JavaScript | MDN
regex - Bug with RegExp in JavaScript when do global search - Stack Overflow

沒有留言:

張貼留言