Me gustaría encontrar la cadena repetitiva más larga dentro de una cadena, implementada en JavaScript y utilizando un enfoque basado en expresiones regulares.Encuentra la subcadena repetitiva más larga en JavaScript con las expresiones regulares
Tengo una implementación de PHP que, cuando se transfiere directamente a JavaScript, no funciona.
La aplicación PHP es tomada de una respuesta a la pregunta "Find longest repeating strings?":
preg_match_all('/(?=((.+)(?:.*?\2)+))/s', $input, $matches, PREG_SET_ORDER);
Esto llenará $matches[0][X]
(donde X
es la longitud de $matches[0]
) con la subcadena más larga de repetición que se encuentran en $input
. He probado esto con muchas cadenas de entrada y he encontrado que estoy seguro de que la salida es correcta.
El puerto más cercano directa en JavaScript es:
var matches = /(?=((.+)(?:.*?\2)+))/.exec(input);
Esto no da resultados correctos
input Excepted result matches[0][X] ====================================================== inputinput input input 7inputinput input input inputinput7 input input 7inputinput7 input 7 XXinputinputYY input XX
No soy lo suficientemente familiarizado con las expresiones regulares para entender lo que la expresión regular utiliza aquí está haciendo.
Ciertamente hay algoritmos que podría implementar para encontrar la subcadena repetitiva más larga. Antes de intentar hacer eso, espero que una expresión regular diferente produzca los resultados correctos en JavaScript.
¿Se puede modificar la expresión regular anterior para que el resultado esperado se devuelva en JavaScript? Acepto que esto puede no ser posible en un one-liner.