现代浏览器(如Firefox 3+,Safari 4+,IE 7+)中正则表达式的最大大小是多少?假设这是一个简单的正则表达式,例如“foo | bar | baz | woot | ...”。
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));
}
}
当你遇到错误时,说明你已经达到了极限。
简单测试
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位)中,当我尝试使用正则表达式匹配3,204,161个字符时,出现错误。如果是3,204,160个字符则没有问题。
在Chrome 5.0.3中,限制在20M到25M个字符之间。
在Firefox中出现的错误信息为:
script stack space quota is exhausted
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;
}
}
那么你就不必担心浏览器的限制,结果很可能会表现得更好(因为正则表达式版本需要解析和编译正则表达式,有大量的回溯等)。