¿Cuál es el tamaño máximo de una expresión regular en los navegadores modernos (es decir, Firefox 3+, Safari 4+, IE 7+)? Asumir una expresión regular simple, de, por ejemplo "foo | bar | Baz | woot | ..."¿Tamaño/longitud máxima de expresión regular en navegadores web "modernos"?
Respuesta
Usted puede utilizar este código para probar, en IE8/Firefox con Firebug/cromo.
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));
}
}
Cuando obtiene un error, encuentra el límite.
prueba simple
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
RESULTADOS
En Firefox 3.6.3 (Ubuntu 32 bits) consigo error cuando intenté una expresión regular con
caracteres 9M (9.999.990 caracteres)
3.204.161 caracteres. Con 3.204.160 está bien.
En Chrome 5.0.3 el límite es algo entre 20M y 25M caracteres.
El error, en Firefox, es:
script stack space quota is exhausted
Nota: Si usted hizo alguna prueba, por favor comentar aquí.
Muchas distribuciones limitan el espacio de la pila a 10 MB, por lo que es probable que sea eso lo que estás golpeando. – Chris
@Chris gracias por su comentario, pero la parte superior está cerca de 3M caracteres ... Estoy tratando de obtener el número exacto. – Topera
Parece que para todos los propósitos prácticos, el tamaño de RegEx es prácticamente ilimitado. Ahora voy a ir por el agujero del conejo para determinar el rendimiento de expresiones regulares absurdamente grandes. :) – Tyson
Si la expresión regular es tan simple como que, ¿por qué no tener un bucle que hace comparaciones de cadenas:
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;
}
}
Entonces usted no tiene que preocuparse por las limitaciones del navegador, y es probable que realizar mucho mejor como resultado (ya que la versión de expresión regular tendría que analizar y compilar la expresión regular, habría un montón de seguimiento, etc.).
Es cierto, pero no responde la pregunta. – Bergi
Ciertas expresiones regulares requieren cantidades exponenciales de memoria para evaluar. Dado que Firefox hace esto en la pila, que está limitado a 10 MB en muchas distribuciones de Linux, e incluso más pequeño en Windows (al menos algunas versiones de Firefox), puedes alcanzar el límite bastante rápido si usas una expresión regular que requiere memoria exponencial para convertir a formato DFA para evaluar.
- 1. expresión regular "contiene" otra expresión regular
- 2. ¿Expresión regular para encontrar una expresión regular?
- 3. ¿Los navegadores modernos están cargando scripts en paralelo o secuencialmente?
- 4. ¿JQuery AJAX funciona en navegadores modernos con PUT y DELETE?
- 5. expresión regular en iOS
- 6. Expresión regular al inglés
- 7. ¿Por qué las bases de códigos para navegadores web modernos son tan grandes?
- 8. anchura() y la altura() para navegadores modernos sin jQuery
- 9. Web workers en navegadores móviles
- 10. Expresión regular de Python
- 11. Rompecabezas de expresión regular
- 12. Problema de expresión regular
- 13. ¿Los navegadores modernos aún limitan las descargas paralelas?
- 14. ¿Cómo implementan los navegadores modernos JS Array, específicamente agregando elementos?
- 15. expresión regular lookahead negativo
- 16. Comprueba si una expresión regular cubre otra expresión regular
- 17. ¿Hay una expresión regular para detectar una expresión regular válida?
- 18. Expresión regular en voxel space
- 19. ¿Usar expresión regular en css?
- 20. - (guión) en la expresión regular
- 21. Multilínea expresión regular en C#
- 22. Exclusivo O en expresión regular
- 23. expresión regular internacionalizada en postgresql
- 24. Optimizaciones JIT en su máxima expresión
- 25. Longitud mínima Expresión regular
- 26. c expresión regular howto
- 27. R- cuestión expresión regular
- 28. Expresión regular para Dummys
- 29. Expresión regular reemplazar
- 30. Expresión regular [Cualquier número]
Si tiene que preguntar, lo está haciendo mal ... –
@Andrew O tal vez está haciendo su tesis de maestría sobre los límites del navegador esotérico. – treeface
O soy curioso por naturaleza. – Tyson