Autor Zpráva
Kryvosa
Profil *
Pěkný den všem,
na jednom osobním online chatu který vytvářím se snažím přidat nahrazení smajlíka (":)", popř. ":-)") za jeho obrázkový ekvivalent:
message=message.replace(/( |^):-?\)( |$)/g,"$1<img class='icon' src='./img/emo/3.png'>$2");
Tenhle regulár ale selže, je li více smajlíků za sebou (npř. ":) :) :)"), i když jsou oddělené mezerou.
Nevíte někdo jak tento regulár upravit/přepsat tak, aby fungoval i na takovéto vícenásobné případy, a to bez odstranění podmínky že před i za smajlíkem musí být mezera?
(Nebo začátek/konec řádku?)
Keeehi
Profil
(?<= |^):-?\)(?= |$)
Problém je, že javascript neumí lookafter. Ale pokud to nahrazení můžeš udělat až na serveru, tak tam ti to PHP zvládne udělat.
Nebo můžeš použít to tvoje řešení a jen to nahrazení pustit dvakrát po sobě.

No nicméně, proč tam vyžaduješ mezeru? V Ahoj :). by to bylo také dobré naradit, ne?
Radek9
Profil
Kryvosa:
JS regexy podporují tzv. lookaheady. Je to část řetězce, u které se jen ověřuje, že následuje (příp. nenásleduje u negativního lookaheadu), ale dál už se s ní nepracuje: (Více zde.)

message=message.replace(/( |^):-?\)(?= |$)/g,"$1<img class='icon' src='./img/emo/3.png'>"); // smazáno $2

Taktéž bych doporučil místo mezery používat \s, neboť tak odchytíš všechny bílé znaky:

message=message.replace(/(\s|^):-?\)(?=\s|$)/g,"$1<img class='icon' src='./img/emo/3.png'>");

No a jako třešničku na dortu můžeš vychytat i intepunkci za smajlíkem:

message=message.replace(/(\s|^):-?\)(?=\s|\.|\?|!|:|$)/g,"$1<img class='icon' src='./img/emo/3.png'>");

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: