Tôi gặp vấn đề lạ khi làm việc với hàm Javascript Regexp.exec. Khi gọi nhiều lần hàm trên đối tượng regexp mới (tôi đoán ...), nó hoạt động một lần mỗi hai lần. Tôi không hiểu tại sao!Javascript Regex bằng/g được sử dụng nhiều lần
Dưới đây là một ví dụ về vòng lặp nhỏ nhưng nó thực hiện tương tự khi được sử dụng một lần trong một hàm và được gọi nhiều lần.
for (var i = 0; i < 5; ++i) {
console.log(i, (/(b)/g).exec('abc'));
}
> 0 ["b", "b"]
> 1 null
> 2 ["b", "b"]
> 3 null
> 4 ["b", "b"]
Khi xóa/g, nó trở lại bình thường.
for (var i = 0; i < 5; ++i) {
console.log(i, (/(b)/).exec('abc'));
} /* no g^*/
> 0 ["b", "b"]
> 1 ["b", "b"]
> 2 ["b", "b"]
> 3 ["b", "b"]
> 4 ["b", "b"]
Tôi đoán rằng có tối ưu hóa, lưu đối tượng regexp, nhưng có vẻ lạ.
Hành vi này giống nhau trên Chrome 4 và Firefox 3.6, tuy nhiên nó hoạt động như (I) dự kiến trong IE8. Tôi tin rằng đó là dự định nhưng tôi không thể tìm thấy logic trong đó, có thể bạn sẽ có thể giúp tôi!
Cảm ơn
Các obj regexp tương tự đang được tái sử dụng bên trong vòng lặp của bạn có, và 'lastIndex' reset cho' 0' sau khi không khớp với bất kỳ thứ gì lặp lại lần thứ 2. Xem http://stackoverflow.com/questions/1760192/which-way-is-better-to-define-javascript-regular-expressions/1760506#1760506 để biết rõ về "lỗi" này. –
tôi nghĩ rằng sự cố này có thể đã được khắc phục ngay bây giờ. cus tôi nhận được sản lượng chính xác từ cả hai cách trong moz, chrome và tức là. ai đó có thể đưa ra bất kỳ lời giải thích cho điều này? –