Odstranění odkazů z popisu produktu, vhodné pro Mall

Na náš support přišla opakovaně žádost o radu, jak odstranit odkazy v elementu DESCRIPTION, aby se feed načetl do Mall marketplace, tak sem dávám návod, jak na to.

Návod platí nejen pro Mall, jde o obecný návod, jak z HTML kódu v DESCRIPTION odstranit tagy s odkazy na nějaké stránky.

Stačí si jen přidat pravidlo typu Najít a nahradit, kde zatrhneme hledání jako regulární výraz a ve dvou řádcích odstraníme:

  1. začátek HTML značky odkazu: <a href=\".+?\">
  2. konec HTML značky odkazu: <\/a>

Tyto regulární výrazy zadáme do pole Najít, pole Nahradit necháme prázdné (nic do něj nevyplníme).

Ukázka pravidla v Mergadu:

Pozn.: za regulární značky je možné připsat vysvětlující komentář, což je na screenshotu použito, viz (?# začátek odkazu) a (?# konec odkazu). Komentář nemá na funkci regulárního výrazu žádný vliv, je tam jen pro budoucí snadné pochopení, co regulární výraz má vykonávat.

Ukázka výsledku po aplikování pravidel:

1 Like

A kdybych chtěl odstranit i ten text odkazu mezi tagy? Máme tam například toto a bez odkazu to nedává smysl:

Jak by vypadal ten regulární výraz?

díky moc

Z.Kolář

1 Like

Zkusil bych třeba tohle
Najít: \<a.*\<\/a\>
Nahradit: (nic)

2 Likes

V obdobném stylu je možno vyřešit i tzv. kotvy čili webové záložky … (a name).

2 Likes

Super, vyzkoušeno a nasazeno.

díky Z.Kolář

2 Likes

Pozor jen na to, že regulární výrazy se snaží zachytit co nejvíce danému výrazu vyhovuje, jsou tzv. greedy, tedy “hladové, nenasytné” :slight_smile:

V praxi by tento regulární výraz fungoval jen pro jeden jediný odkaz v elementu. Když by bylo odkazů v textu více, dopadlo by to takhle:

Zachytili bychom text od za začátku prvního odkazupo konec posledního odkazu a všechen text mezi odkazy také.

Řešením je omezit nenasytnost regulárního výrazu další regulární značkou: ?, která potom zachytí nejkratší možný text, který regulárnímu výrazu vyhovuje:

Najít: \<a.*?\<\/a\>, resp. fungovat bude i s neescapovanými znaky: <a.*?</a>
Nahradit: (nic)

Ukázka:

3 Likes