Я хотел бы найти самую длинную повторяющуюся строку в строке, реализованную в JavaScript и использующую подход на основе регулярных выражений.
У меня есть реализация PHP, которая при прямой портировании на JavaScript не 't работа.
Реализация PHP взята из ответа на вопрос "Найти самые длинные повторяющиеся строки?" :
preg_match_all('/(?=((.+)(?:.*?\2)+))/s', $input, $matches, PREG_SET_ORDER);
Это заполнит $matches[0][X]
(где X
- это длина $matches[0]
) с самой длинной повторяющейся подстрокой в $input
.Я проверил это со многими входными строками и убедился, что вывод правильный.
Ближайший прямой порт в JavaScript:
var matches = /(?=((.+)(?:.*?\2)+))/.exec(input);
Это не дает правильных результатов
input Excepted result matches[0][X]
======================================================
inputinput input input
7inputinput input input
inputinput7 input input
7inputinput7 input 7
XXinputinputYY input XX
Я недостаточно знаком с регулярными выражениями, чтобы понять, что делает здесь используемое регулярное выражение.
Конечно, есть алгоритмы, которые я мог бы реализовать, чтобы найти самую длинную повторяющуюся подстроку.Прежде чем я попытаюсь это сделать, я надеюсь, что другое регулярное выражение даст правильные результаты в JavaScript.
Можно ли изменить указанное выше регулярное выражение так, чтобы ожидаемый результат возвращался в JavaScript?Я принимаю, что это может быть невозможно в однострочнике.