Tôi đã viết một thử nghiệm Javascript RegExp để phát hiện định dạng chuỗi ngày, tôi thêm một "g" cờ thừa do nhầm lẫn và tìm thấy một cái gì đó thú vị.Thú vị thử nghiệm của Javascript RegExp
var s = "2009/03/10";
var regex=/^\d{4}[/]\d{2}[/]\d{2}$/g;
alert(regex.test(s));
alert(regex.test(s));
alert(regex.test(s));
alert(regex.test(s));
Tôi nhận được 'true', sau đó là 'false', sau đó lại là 'false'.
Nếu tôi sử dụng vòng lặp để thực thi nó, tôi thấy điều thú vị hơn, tôi nhận được bốn "true" trong IE và Safari, và đúng, sai, đúng, sai trong FF, Chrome.
for (var i=0; i<4; i++)
{
var s = "2009/03/10";
var regex=/^\d{4}[/]\d{2}[/]\d{2}$/g;
alert(regex.test(s));
}
Có ai có ý tưởng giải thích lý do tại sao regex Javascript hoạt động như vậy và điều gì làm cho trình duyệt trả về các kết quả khác nhau? (liên quan đến khai báo biến và phạm vi cuộc sống?)
Cảm ơn rất nhiều, giải thích của MDC rất rõ ràng. – Darkthread
+1 cảm ơn sự giúp đỡ, thiết lập reg.lastIndex = 0 trước khi mỗi bài kiểm tra giải quyết được vấn đề của tôi. – bendewey
Dường như bạn có thể đặt lastIndex = 0 trước mỗi bài kiểm tra nếu điều này gây ra sự cố trong vòng lặp chẳng hạn. – k0nG