Hôm nay, tôi đã gặp một vấn đề biểu thức chính quy JavaScript rất lạ. Khi sử dụng công cụ sửa đổi toàn cục (// g), RegExp.test() mang lại các giá trị khác nhau trong các cuộc gọi tiếp theo. Bất cứ ai có thể giải thích lý do tại sao?Tại sao RegExp của JavaScript duy trì trạng thái giữa các cuộc gọi?
var s = "youtube.com/watch?v=XyeebVA3DNk";
var re1 = /^youtube\.com\/watch[a-zA-Z0-9_\-\?\&\=\/]+/g;
console.log(re1.test(s)); // true
console.log(re1.test(s)); // false
console.log(re1.test(s)); // true
console.log(re1.test(s)); // false
console.log(re1.test(s)); // true
console.log(re1.test(s)); // false
console.log(re1.test(s)); // true
var re2 = /^youtube\.com\/watch[a-zA-Z0-9_\-\?\&\=\/]+/;
console.log(re2.test(s)); // true
console.log(re2.test(s)); // true
console.log(re2.test(s)); // true
console.log(re2.test(s)); // true
console.log(re2.test(s)); // true
console.log(re2.test(s)); // true
Tôi có thể tạo lại điều này trong Chrome 8 và FireFox 3.6.