Trong Internet Explorer 10, điều này:/.?e.?/ phù hợp với toàn bộ chuỗi, chứ không phải là dự kiến chuỗi
'abcdefghi'.match(/.?e.?/)
đánh giá để ['def']
, như tôi mong đợi, nhưng trong Firefox 21.0, nó để đánh giá ['abcdefghi']
. (Xem this jsFiddle.) Tôi nhận được cùng một kiểu hành vi không mong muốn đối với một số regex khác nhất định bắt đầu và kết thúc bằng nội dung tùy chọn, chẳng hạn như /.?e.{0,2}/
và /.{0,2}e.{0,2}/
; tuy nhiên, những người nhận xét chỉ ra các chế độ tương tự nhau, chẳng hạn như /\S?e\S?/
và /(?:.?e.?)/
, là không bị ảnh hưởng bởi. Điều tương tự cũng áp dụng cho phương pháp replace
.
Tôi có thiếu thứ gì đó hiển nhiên không? Có một số lý do sâu sắc cho hành vi này?
Cũng trong chrome của nó: 'e de ef cdef' +1 cho cái này. –
Vâng, thêm một nhóm có vẻ * sửa * nó: ''abcdefghi'.match (/ (?:.? E.?) /)'. Nhưng, tôi đoán lỗi. –
Vấn đề tương tự xuất hiện trong Firefox 22, nhưng cần lưu ý rằng '/.?.?/' hoạt động đúng, cũng như '/ e.? /' Và '/.? E /' – SheetJS