Kích thước tối đa của cụm từ thông dụng trong các trình duyệt hiện đại (tức là Firefox 3+, Safari 4+, IE 7+) là gì? Giả sử một biểu thức thông thường đơn giản, trong số, nói "foo | bar | baz | woot | ..."Kích thước/độ dài biểu thức chính quy tối đa trong trình duyệt web "hiện đại"?
Trả lời
Bạn có thể sử dụng mã này để kiểm tra, trong IE8/firefox bằng firebug/Chrome.
var regex = "";
var maximum = 100;
var showAfter = 95;
for(i = 1; i < maximum; i++) {
regex += "aaaaaaaaaa";
if (i > showAfter) {
console.log(10 * i + " chars");
console.log(RegExp(regex));
}
}
Khi bạn gặp lỗi, bạn đã tìm thấy giới hạn.
SIMPLE THI
var regex = "";
var chars = 3204161;
for(i = 0; i < chars; i++) {
regex += "a";
}
alert(chars + " chars");
var a = RegExp(regex); // don't send to console, to be faster
KẾT QUẢ
Trong Firefox 3.6.3 (Ubuntu 32 bit) tôi nhận được báo lỗi khi tôi đã cố gắng một regex với
chars 9M (9.999.990 ký tự)
3.204.161 ký tự. Với 3,204.160 nó là ok.
Trong Chrome 5.0.3 giới hạn là khoảng từ 20 triệu đến 25 triệu ký tự.
Lỗi, trong firefox, là:
script stack space quota is exhausted
Lưu ý: Nếu bạn đã làm một số kiểm tra, hãy bình luận ở đây.
Nhiều bản phân phối giới hạn không gian ngăn xếp đến 10 MB, vì vậy đó có thể là những gì bạn đang đánh. – Chris
@ Chris cảm ơn nhận xét của bạn, nhưng phần trên gần 3M ký tự ... Tôi đang cố gắng lấy số chính xác. – Topera
Nghe có vẻ như cho tất cả các mục đích thực tế, kích thước RegEx là thực tế không giới hạn. Bây giờ tôi sẽ đi xuống hố thỏ để xác định hiệu suất của các biểu thức chính quy lớn vô lý. :) – Tyson
Nếu biểu thức chính quy bạn là đơn giản như vậy, tại sao không chỉ có một vòng lặp mà không so sánh chuỗi:
var input = "woot";
var tests = ["foo", "bar", "baz", "woot"];
for(i = 0; i < tests.length; i++) {
if (tests[i] == input) {
alert("match found: #" + i);
break;
}
}
Sau đó, bạn không cần phải lo lắng về những hạn chế của trình duyệt, và nó sẽ hoạt động nhiều tốt hơn như là một kết quả (kể từ khi phiên bản biểu thức chính quy sẽ phải phân tích cú pháp và biên dịch regex, sẽ có rất nhiều theo dõi trở lại, và như vậy).
Đúng, nhưng nó không trả lời câu hỏi. – Bergi
Cụm từ thông dụng nhất định yêu cầu số lượng bộ nhớ để đánh giá. Vì Firefox thực hiện điều này trên stack, giới hạn 10 MB trên nhiều bản phân phối Linux và thậm chí nhỏ hơn trong Windows (ít nhất là một số phiên bản Firefox), bạn có thể đạt đến giới hạn khá nhanh nếu bạn sử dụng cụm từ thông dụng yêu cầu bộ nhớ theo cấp số nhân để chuyển đổi thành biểu mẫu DFA để đánh giá.
- 1. Độ dài tối thiểu Biểu thức chính quy
- 2. dài tối đa cho url trong trình duyệt chrome
- 3. Kích thước tối đa của vị trí.hash trong trình duyệt
- 4. Biểu thức chính quy Ký tự đại diện
- 5. HTML 5 - biểu thức chính quy số
- 6. Kích cỡ json tối đa để phản hồi trình duyệt
- 7. 6 chữ số biểu thức chính quy
- 8. biểu thức chính quy trong phân tách chuỗi javascript, vấn đề tương thích với trình duyệt
- 9. Phương ngữ biểu thức chính quy hiện đại có thường xuyên không?
- 10. Cách tách quy tắc biểu thức chính quy dài thành nhiều dòng trong Python
- 11. Biểu thức chính quy JavaScript
- 12. Trình xác thực biểu thức chính quy ASP cho hộp văn bản nhiều dòng
- 13. Câu đố biểu hiện chính quy
- 14. Đơn giản hóa biểu thức chính quy trong Mathematica
- 15. biểu thức chính quy lookbehind javascript
- 16. Các biểu thức chính quy thông thường
- 17. Biểu thức chính quy kết thúc
- 18. quy tắc số css tối đa tôi có thể chỉ định trong biểu định kiểu cho mỗi trình duyệt
- 19. Quy tắc biểu thức chính quy trong Outlook 2007?
- 20. Biểu thức chính quy của Python
- 21. Clojure multiline biểu thức chính quy
- 22. Biểu thức chính quy tiêu cực lookahead
- 23. Biểu thức chính quy của Python HOẶC
- 24. Cần biểu thức chính quy để xác nhận tên
- 25. Perl chia và biểu thức chính quy
- 26. TCL mong đợi biểu thức chính quy
- 27. Android: chiều dài tối đa của url
- 28. Biểu thức chính quy - Ruby vs Perl
- 29. Hạn chế của Biểu thức chính quy?
- 30. Tạo mảng biểu thức chính quy Javascript
Nếu bạn phải hỏi, bạn đang làm sai ... –
@Andrew Hoặc có thể anh ấy đang làm luận văn thạc sĩ về giới hạn trình duyệt bí truyền. – treeface
Hoặc tôi tự nhiên tò mò. – Tyson