Каков максимальный размер регулярного выражения в современных браузерах (т.е. Firefox 3+, Safari 4+, IE 7+)? Предположим простое регулярное выражение, скажем, «foo | bar | baz | woot | ...»

5
Tyson 10 Сен 2010 в 04:08

2 ответа

Некоторые регулярные выражения требуют экспоненциального объема памяти для оценки. Поскольку Firefox делает это в стеке, который ограничен 10 МБ во многих дистрибутивах Linux, и даже меньше в Windows (по крайней мере, в некоторых версиях Firefox), вы можете довольно быстро достичь предела, если используете регулярное выражение, требующее экспоненциальной памяти преобразовать в форму DFA для оценки.

2
Chris 10 Сен 2010 в 00:35

Если ваше регулярное выражение просто так, почему бы просто не иметь цикл, который выполняет сравнение строк:

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;
   }
}

Тогда вам не нужно беспокоиться об ограничениях браузера, и в результате он, вероятно, будет работать намного лучше (поскольку версия с регулярным выражением должна была бы проанализировать и скомпилировать регулярное выражение, будет много обратного отслеживания и т. Д. ) .

-1
Dean Harding 10 Сен 2010 в 00:19