2011-10-05 26 views
6
> var p = /abc/gi; 
> var s = "abc"; 
> p.test(s); 
    true 
> p.test(s); 
    false; 

Khi tôi chạy mã này trên bảng điều khiển của Chrome Tôi có đầu ra này ở trên. Mỗi lần tôi gọi '.test()' tôi nhận được một giá trị khác. Ai đó có thể giải thích cho tôi tại sao điều này xảy ra? nhờJavascript Regex với .test()

+1

http://stackoverflow.com/questions/7331753/strange-behavior-of-javascript-regex-test-function –

+0

Nhiều giá trị nhân bản: [Thú vị thử nghiệm của Javascript RegExp] (http://stackoverflow.com/q/604860) và [Kiểm tra biểu thức chính quy không thể quyết định giữa đúng và sai] (http://stackoverflow.com/questions/2669861/regular-expression-test- không thể quyết định-giữa-đúng-và-sai-javascript) –

Trả lời

5

Cờ g làm cho RegExp đen việc bạn sử dụng để theo dõi các kết quả phù hợp LastIndex

Nếu bạn muốn;

print(p.test(s), p.lastIndex) 
print(p.test(s), p.lastIndex) 

Bạn sẽ thấy

true,3 
false,0 

Vì vậy, các thử nghiệm thứ 2 thất bại vì không có trận đấu gia tăng từ ngày 1.

2

Đó là vì cờ/g. Mỗi tìm kiếm liên tiếp bắt đầu từ ký tự được đối sánh lần cuối trong tìm kiếm trước đó. Trong trường hợp của bạn, trong lần chạy thứ hai, nó bắt đầu từ cuối chuỗi và trả về false. Lần thứ ba nó bắt đầu lại từ đầu. Và kể từ đó trở đi.

Ngoài ra, hãy nhìn vào câu hỏi này: Why RegExp with global flag in Javascript give wrong results?

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