Chciałbym znaleźć najdłuższy powtarzający się ciąg w ciągu znaków, zaimplementowany w JavaScript i przy użyciu metody opartej na wyrażeniu regularnym.Znajdź najdłuższy powtarzający się łańcuch w JavaScript za pomocą wyrażeń regularnych
Mam implementację PHP, która po bezpośrednim przeniesieniu do JavaScript nie działa.
Implementacja PHP jest pobierana z odpowiedzią na pytanie "Find longest repeating strings?":
preg_match_all('/(?=((.+)(?:.*?\2)+))/s', $input, $matches, PREG_SET_ORDER);
To będzie zapełnić $matches[0][X]
(gdzie X
jest długość $matches[0]
) z najdłuższym powtarzając podciągu można znaleźć w $input
. Przetestowałem to z wieloma ciągami wejściowymi i znalazłem pewność, że dane wyjściowe są poprawne.
Najbliżej bezpośredni portu w JavaScript jest:
var matches = /(?=((.+)(?:.*?\2)+))/.exec(input);
To nie daje poprawne wyniki
input Excepted result matches[0][X] ====================================================== inputinput input input 7inputinput input input inputinput7 input input 7inputinput7 input 7 XXinputinputYY input XX
nie jestem na tyle obeznany z wyrażeń regularnych, aby zrozumieć, co wyrażenie regularne używane tutaj to robi.
Istnieją z pewnością algorytmy, które można zastosować, aby znaleźć najdłuższy powtarzający się fragment. Zanim spróbuję to zrobić, mam nadzieję, że inne wyrażenie regularne da prawidłowe wyniki w JavaScript.
Czy powyższe wyrażenie regularne można zmodyfikować tak, aby oczekiwane wyniki były zwracane w JavaScript? Zgadzam się, że może to nie być możliwe w przypadku jednego linera.