Jaki jest maksymalny rozmiar wyrażenia regularnego w nowoczesnych przeglądarkach (np. Firefox 3+, Safari 4+, IE 7+)? Załóżmy proste wyrażenie regularne, powiedzmy "foo | bar | baz | woot | ..."Maksymalny rozmiar/długość wyrażenia regularnego w "nowoczesnych" przeglądarkach internetowych?
Odpowiedz
Możesz użyć tego kodu do przetestowania, w IE8/firefox za pomocą firebuga/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));
}
}
Gdy pojawi się błąd, ustalono limit.
prosty 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
WYNIKI
W Firefoksie 3.6.3 (Ubuntu 32 bity) otrzymuję błąd, gdy próbowałem regex z
9M znaków (9.999.990 znaków)
3.204.161 znaków. W wersji 3.204.160 wszystko jest w porządku.
W przeglądarce Chrome 5.0.3 limit wynosi od 20 do 25 znaków.
Błąd w Firefoksie, to:
script stack space quota is exhausted
Uwaga: Jeśli zrobiłeś jakiś test, prosimy o komentarz tutaj.
Wiele dystrybucji ogranicza przestrzeń stosu do 10 MB, więc prawdopodobnie to właśnie trafiasz. – Chris
@Chris dzięki za komentarz, ale na górze jest blisko 3M znaków ... Próbuję uzyskać dokładną liczbę. – Topera
Brzmi jak ze wszystkich praktycznych zastosowań, rozmiar RegEx jest praktycznie nieograniczony. Teraz zamierzam przejść przez króliczą dziurę określania wydajności absurdalnie dużych wyrażeń regularnych. :) – Tyson
Jeśli wyrażenie regularne jest prosta tak, dlaczego nie wystarczy mieć pętlę, która robi porównań ciąg znaków:
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;
}
}
Wtedy nie trzeba się martwić o ograniczenia przeglądarek, i będzie to prawdopodobnie wykonać znacznie w związku z tym lepiej (ponieważ wersja wyrażeń regularnych musiałaby analizować i kompilować wyrażenie regularne, byłoby dużo śledzenia wstecznego itd.).
To prawda, ale nie odpowiada na pytanie. – Bergi
Niektóre wyrażenia regularne wymagają wykładniczej ilości pamięci do oceny. Ponieważ Firefox robi to na stosie, który jest ograniczony do 10 MB na wielu dystrybucjach Linuksa, a nawet mniejszy w systemie Windows (przynajmniej niektóre wersje Firefoksa), możesz dość szybko osiągnąć limit, jeśli użyjesz wyrażenia regularnego wymagającego pamięci wykładniczej przekonwertować formularz DFA do oceny.
- 1. Zdarzenie kółka myszy w nowoczesnych przeglądarkach
- 2. Oracle - Określ maksymalny obsługiwany rozmiar dla wyrażenia regularnego
- 3. Automatyczne łączenie wyrażenia regularnego
- 4. Minimalna długość wyrażenia regularnego
- 5. Jak tymczasowo wyłączyć ochronę XSS w nowoczesnych przeglądarkach do testowania?
- 6. Czy JSON Hijacking nadal jest problemem w nowoczesnych przeglądarkach?
- 7. Czy istnieje sposób na uzyskanie CSS XSS w nowoczesnych przeglądarkach?
- 8. Obsługa pióra/rysika w przeglądarkach internetowych
- 9. Jak sprawdzić poprawność wyrażenia regularnego?
- 10. Znaczenie części wyrażenia regularnego perla?
- 11. Wyjaśnienie wyrażenia regularnego dla vim
- 12. zabezpieczone hasłem z wyrażenia regularnego
- 13. Policz liczbę dopasowań wyrażenia regularnego w JavaScript
- 14. Czy możesz użyć wyrażenia regularnego w .babelrc?
- 15. Opcjonalne parametry w bash wyrażenia regularnego
- 16. Jak umieścić zmienną w dopasowaniu wyrażenia regularnego?
- 17. Dopasuj zapytanie do wyrażenia regularnego w SQL?
- 18. Zastępowanie wyrażenia regularnego w programie Visual Studio
- 19. Jak używać zmiennej wewnątrz wyrażenia regularnego?
- 20. Konwersja wyrażenia regularnego JavaScript na składnię Javy
- 21. test nazwa pliku z wyrażenia regularnego
- 22. Podziel ciąg na podstawie wyrażenia regularnego
- 23. dostać tylko cyfry przy użyciu wyrażenia regularnego
- 24. Wyodrębnianie ciągów statycznych z wyrażenia regularnego
- 25. Zwracam tylko część dopasowania z wyrażenia regularnego
- 26. Jak użyć wyrażenia regularnego do dopasowania nazwy?
- 27. Tworzenie wszystkich możliwych dopasowań wyrażenia regularnego
- 28. Weryfikacja karty kredytowej za pomocą wyrażenia regularnego?
- 29. Czy odczytać plik, używając wyrażenia regularnego?
- 30. Problem z wyrażenia regularnego usunąć znaczniki HTML
Jeśli musisz zapytać, robisz to źle ... –
@Andrew A może on robi swoją pracę magisterską na temat ezoterycznych ograniczeń przeglądarki. – treeface
Albo jestem z natury ciekawy. – Tyson