Qual è la dimensione massima di un'espressione regolare nei browser moderni (ad esempio Firefox 3+, Safari 4+, IE 7+)? Assumi una semplice espressione regolare, di, diciamo "foo | bar | baz | woot | ..."Dimensione massima/lunghezza dell'espressione regolare nei browser Web "moderni"?
risposta
Puoi utilizzare questo codice per testare in IE8/firefox con 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));
}
}
Quando si verifica un errore, hai trovato il limite.
TEST SEMPLICE
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
RISULTATI
In Firefox 3.6.3 (Ubuntu 32 bit) ottengo l'errore quando ho provato una regex con
caratteri 9M (9.999.990 caratteri)
3.204.161 caratteri. Con 3.204.160 va bene.
In Chrome 5.0.3 il limite è tra 20 e 25 M caratteri.
L'errore, in Firefox, è:
script stack space quota is exhausted
Nota: Se avete fatto un po 'di prova, si prega di commentare qui.
Molte distribuzioni limitano lo spazio dello stack a 10 MB, quindi è probabilmente quello che stai colpendo. – Chris
@ Chris ringrazia per il tuo commento, ma la parte superiore è vicino ai caratteri 3M ... Sto cercando di ottenere il numero esatto. – Topera
Sembra come per tutti gli scopi pratici, la dimensione RegEx è praticamente illimitata. Ora vado giù nella tana del coniglio per determinare l'esecuzione di espressioni regolari assurdamente grandi. :) – Tyson
Se l'espressione regolare è semplice come quello, perché non basta avere un ciclo che fa confronti di stringhe:
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;
}
}
Allora non dovete preoccuparvi di limitazioni del browser, ed è probabile che esegue molto meglio come risultato (dal momento che la versione dell'espressione regolare dovrebbe analizzare e compilare la regex, ci sarebbe un sacco di back tracking, e così via).
Vero, ma non risponde alla domanda. – Bergi
Alcune espressioni regolari richiedono una quantità di memoria esponenziale da valutare. Dato che Firefox lo fa in pila, che è limitato a 10 MB su molte distribuzioni Linux, e ancora più piccolo in Windows (almeno alcune versioni di Firefox), potresti raggiungere il limite abbastanza rapidamente se usi un'espressione regolare che richiede memoria esponenziale per convertire in forma DFA per valutare.
- 1. Perché il pipelining è disattivato nei browser moderni?
- 2. JSON Hijacking è ancora un problema nei browser moderni?
- 3. Evento della rotellina del mouse nei browser moderni
- 4. C'è un modo per ottenere CSS XSS nei browser moderni?
- 5. Segmentazione della memoria nei moderni sistemi operativi
- 6. Operatori Web nei browser per dispositivi mobili
- 7. supporto penna/stilo nei browser Web
- 8. Come disabilitare temporaneamente la protezione XSS nei browser moderni per i test?
- 9. I moderni browser caricano gli script parallelamente o in sequenza?
- 10. C'è un modo per sostituire questo codice di lodash _.chain con javascript nei browser moderni?
- 11. Gli elementi inline non comprimono spazi bianchi prima della fine del tag, nei browser moderni?
- 12. Debug nei browser mobili?
- 13. Il ruolo e l'ambito dell'Ajax nei siti Web moderni. Trovare il giusto equilibrio
- 14. Perché i codebase per i browser Web moderni sono così grandi?
- 15. Per quanto tempo il database SQL Web rimarrà nei browser?
- 16. Nei browser Web, l'oggetto finestra è un oggetto nativo ECMAScript?
- 17. È ragionevole scegliere OpenGL 3.2 nei giochi moderni?
- 18. I CSS vengono utilizzati ovunque oltre ai browser Web?
- 19. Javascript come $ (document) .ready() per i browser "moderni HTML5"
- 20. I browser moderni limitano ancora i download paralleli?
- 21. TLS/SRP nei browser?
- 22. Cattura hotkey nei browser
- 23. La "regex" nei linguaggi di programmazione moderni è davvero "grammatica sensibile al contesto"?
- 24. Dimensione massima location.hash nel browser
- 25. gnuplot - regolare la dimensione della chiave/legenda
- 26. Test web cross-browser mobile
- 27. Cosa significa \ d + nei termini dell'espressione regolare?
- 28. browser web sito timeout
- 29. In che modo i browser moderni implementano JS Array, in particolare aggiungendo elementi?
- 30. Dimensione dell'elemento del browser Android troppo piccola
Se devi chiedere, stai sbagliando ... –
@Andrew O forse sta facendo la sua tesi di master sui limiti del browser esoterico. – treeface
O sono naturalmente curioso. – Tyson