ano, a skoncis v nekonecnej slucke...
<a href="/user/john">
<a href="/user/john">
<a href="/user/john">
<a href="/user/john">...</a>
</a>
</a>
</a>
Ne, neskončím. Když nahrazuju
@john za
john, nemůžu skončit v nekonečné smyčce. Dokonce neskončím v nekonečné smyčce ani při nahrazování
@john ta
@john, protože všechny funkce
replaceAll() ve všech jazycích si vždy pamatují pozici, kde text nahradily naposledy, a pokračují dále, takže se nezacyklí.
Keby to bolo take lahke tak sa tu nepytam.
Nejkomplikovanější na tom evidentně bude zadání. Když chcete něco nahrazovat v textu, dejte sem příklad vstupu a odpovídajícího výstupu.
Pokud máte problém s tím, že chcete nahrazovat @john → xxx@johnxxx a @johnatan → xxx@johnatanxxx, ale když už jednou nahradíte @johnatana, nechcete to pak znovu nahrazovat jako @johna, pak si prostě místo nahrazování jenom zapamatujte pozice, kde se má něco nahradit, a náhradu proveďte až na konec. To zapamatování pozic je nejjednoduší udělat tak, že si vytvoříte seznam, kde se budou střídat textové části a náhrady, a v příštím kole budete nahrazovat jen v textových částech.
Začnete tedy se vstupem:
[
"@john and @johnathan went to see @sarah in their #hometown to look at her new #home.",
]
Nahradíte @johnathan:
[
"@john and ",
{replace: "@johnathan"},
" went to see @sarah in their #hometown to look at her new #home.",
]
Pokračujete náhradou @john ve zbývajících textech,
[
{replace: "@john"},
" and ",
{replace: "@johnathan"},
" went to see @sarah in their #hometown to look at her new #home.",
]
Na závěr pole projdete, texty necháte jak jsou a objekty označující náhradu nahradíte nahrazujícím textem. A pak už jen pole spojíte do stringu.
Celé to samozřejmě děláte tak, že pole nahrazovaných textů je seřazené podle délky od nejdelšího, jak jsem psal na začátku.