Каков максимальный размер регулярного выражения в современных браузерах (т. Е. Firefox 3+, Safari 4+, IE 7+)? Предположим, что простое регулярное выражение, например, «foo | bar | baz | woot | ...»Максимальный размер/длина регулярного выражения в "современных" браузерах?
ответ
Этот код можно использовать для тестирования в IE8/firefox с 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));
}
}
Когда вы получите сообщение об ошибке, вы нашли ограничение.
SIMPLE TEST
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
РЕЗУЛЬТАТЫ
В Firefox 3.6.3 (Ubuntu 32 бита), я получаю ошибку, когда я попытался регулярное выражение с
9М символов (9,999,990 символов)
3.204.161 символов. С 3.204.160 все в порядке.
В Chrome 5.0.3 предел - это что-то между символами 20M и 25M.
Ошибка в Firefox, является:
script stack space quota is exhausted
Примечание: Если вы сделали какой-то тест, пожалуйста, комментарии здесь.
Многие дистрибутивы ограничивают пространство стека до 10 МБ, так что это, вероятно, то, что вы нажимаете. – Chris
@ Крис благодарит за ваш комментарий, но вершина около 3M символов ... Я пытаюсь получить точное число. – Topera
Похоже, что для всех практических целей размер RegEx практически неограничен. Теперь я собираюсь спуститься по кроличьей норе, чтобы определить производительность абсурдно больших регулярных выражений. :) – Tyson
Если регулярное выражение просто так, почему бы не просто цикл, который делает сравнение строк:
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;
}
}
Тогда вам не придется беспокоиться об ограничениях браузера, и это, скорее всего, работать гораздо лучше в результате (так как версия регулярного выражения должна была бы анализировать и компилировать регулярное выражение, было бы много обратного отслеживания и т. д.).
Правда, но это не отвечает на вопрос. – Bergi
Некоторые регулярные выражения требуют экспоненциального объема памяти для оценки. Поскольку Firefox делает это в стеке, ограниченном 10 МБ во многих дистрибутивах Linux, и даже меньше в Windows (по крайней мере, в некоторых версиях Firefox), вы можете достичь предела довольно быстро, если используете регулярное выражение, которое требует экспоненциальной памяти для преобразования в форму DFA для оценки.
- 1. несколько языков в современных браузерах
- 2. Событие Mousewheel в современных браузерах
- 3. В современных браузерах, в чем необходимость socket.io?
- 4. Javascript регулярного выражения ошибки
- 5. Почему в современных браузерах отключена конвейерная обработка?
- 6. Являются ли классы индексированными в современных браузерах?
- 7. Запросить структуру ['HTTP_USER_AGENT'] в современных браузерах
- 8. Переопределить глобальные переменные в современных браузерах
- 9. НЕВОЗМОЖНО скрыть адресную строку в современных браузерах?
- 10. Использование CKEditor в современных мобильных браузерах
- 11. Запуск Java-апплета в современных браузерах?
- 12. XSS все еще возможен в современных браузерах
- 13. Оператор выражения регулярного выражения
- 14. Выражения регулярного выражения Java
- 15. Запись выражения регулярного выражения
- 16. Оптимизация выражения регулярного выражения
- 17. Создание выражения регулярного выражения
- 18. Выражения выражения слова регулярного выражения
- 19. Выражения выражения регулярного выражения Bash
- 20. выражение выражения регулярного выражения
- 21. Понятие выражения регулярного выражения
- 22. регулярного выражения
- 23. регулярного выражения
- 24. регулярного выражения
- 25. преобразовать строку регулярного выражения в объект регулярного выражения в javascript
- 26. В современных современных браузерах всегда есть преимущество в использовании ввода [type = "button"] над <button>?
- 27. Максимальный размер данных сеанса в разных браузерах
- 28. Максимальный размер буфера обмена в текущих браузерах
- 29. регулярного выражения в preg_replace
- 30. регулярного выражения в JQuery
Если вам нужно спросить, вы делаете это неправильно ... –
@ Андрей или, может быть, он делает свою магистерскую диссертацию по эзотерическим ограничениям браузера. – treeface
Или мне естественно любопытно. – Tyson