2015-03-07 14 views

Trả lời

6

của nó vì g cờ. Nó bắt đầu ghi nhớ chỉ mục cuối cùng của trận đấu và khi bạn làm r.test lần sau, nó bắt đầu từ chỉ mục đó. Đó là lý do tại sao nó thay đổi giữa truefalse. Hãy thử

var r = /e/gi; 
console.log(r.test('e')); 
# true 
console.log(r.lastIndex); 
# 1 
console.log(r.test('e')); 
# false 
console.log(r.lastIndex); 
# 0 
console.log(r.test('e')); 
# true 
console.log(r.lastIndex); 
# 1 
console.log(r.test('e')); 
# false 

Trích dẫn tài liệu MDN này trên RegExp.lastIndex,

Các lastIndex là một đọc/ghi bất động sản số nguyên của biểu thức thông thường mà quy định các chỉ số mà tại đó để bắt đầu trận tới. ...

Thuộc tính này chỉ được đặt nếu cụm từ thông dụng sử dụng cờ "g" để biểu thị tìm kiếm toàn cầu. Các quy tắc sau được áp dụng:

  1. Nếu lastIndex lớn hơn độ dài của chuỗi, test()exec() thất bại, sau đó lastIndex được thiết lập để 0.
  2. Nếu lastIndex là tương đương với chiều dài của chuỗi và nếu cụm từ thông dụng khớp với chuỗi trống, sau đó cụm từ thông dụng khớp với đầu vào bắt đầu từ lastIndex.
  3. Nếu lastIndex là tương đương với chiều dài của chuỗi và nếu biểu thức chính quy không phù hợp với chuỗi rỗng, sau đó các sai lệch biểu thức chính quy đầu vào, và lastIndex được reset về 0.
  4. Nếu không, lastIndex được thiết lập để vị trí tiếp theo sau trận đấu gần đây nhất.

Chữ đậm phía trên trả lời hành vi bạn đã quan sát. Sau trận đấu đầu tiên, e, lastIndex được đặt thành 1, để cho biết chỉ mục mà từ đó trận đấu tiếp theo sẽ được thử. Theo điểm thứ 3 được thấy ở trên, vì số lastIndex bằng với độ dài của chuỗi và cụm từ thông dụng không khớp với chuỗi trống, nó trả về false và đặt lại lastIndex thành 0.

Các vấn đề liên quan