Mi piacerebbe trovare la stringa ripetuta più lunga all'interno di una stringa, implementata in JavaScript e utilizzando un approccio basato su espressioni regolari.Trova la sottostringa ripetuta più lunga in JavaScript utilizzando le espressioni regolari
Ho un'implementazione PHP che, se diretta su JavaScript, non funziona.
L'implementazione di PHP è preso da una risposta alla domanda "Find longest repeating strings?":
preg_match_all('/(?=((.+)(?:.*?\2)+))/s', $input, $matches, PREG_SET_ORDER);
Questo popolerà $matches[0][X]
(dove X
è la lunghezza di $matches[0]
) con la stringa ripetendo più lunga trovata in $input
. Ho provato questo con molte stringhe di input e ho trovato sicuro che l'output sia corretto.
Il porto più vicino diretta in JavaScript è:
var matches = /(?=((.+)(?:.*?\2)+))/.exec(input);
Questo non dà risultati corretti
input Excepted result matches[0][X] ====================================================== inputinput input input 7inputinput input input inputinput7 input input 7inputinput7 input 7 XXinputinputYY input XX
io non sono abbastanza familiarità con le espressioni regolari per capire cosa l'espressione regolare usata qui sta facendo.
Esistono sicuramente degli algoritmi che potrei implementare per trovare la sottostringa ripetuta più lunga. Prima che tenti di farlo, spero che una diversa espressione regolare produrrà i risultati corretti in JavaScript.
È possibile modificare l'espressione regolare precedente in modo che l'output previsto venga restituito in JavaScript? Accetto che ciò potrebbe non essere possibile in una sola linea.