Jak rozdělit do proměnných hodnoty z elementu, ve kterém jsou oddělené oddělovačem, např. adresy obrázků

Ve vlákně Rozdělení proměnné pomocí regulárního výrazu najdete řešení, jak rozdělit kategorie pomocí oddělovače | na jednotlivé (samostatné) kategorie. Tento princip můžete použít pro jakékoliv jiné “explodování” hodnot oddělených nějakým oddělovačem.

Ukážeme si další příklad s obrázky:

Na naši technickou podporu občas přijde dotaz, jak rozdělit adresy obrázků, které jsou v jednom elementu dohromady s oddělovačem například takto:
Element IMAGES → hodnoty v něm: https://domena.cz/obrazek1.jpg;https://domena.cz/obrazek2.jpg;https://domena.cz/obrazek3.jpg atd.

A těchto URL adres obrázků tam bývá různý počet, např. 1 až 20.
Jak získat jednotlivé URL adresy obrázků a naplnit jimi samostatné elementy s obrázky?

Vytvoříme si v Mergadu nové proměnné, které potom můžeme použít v přepisovacím pravidle.

Regulární výraz pro tyto proměnné může vypadat různě, např. takto:

^(.*?)(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?(?:;(.+?))?$

Není nijak složitý, je jenom dlouhý :slight_smile:, protože se tam určitá část (?:;(.+?))? opakuje stále dokola (celkem 19x).

Ukázka zde: https://regex101.com/r/fBOtg1/4

Vytvoření proměnné v Mergadu potom může vypadat takto:

Tip: Jako testovací řetězec si tam klidně zadejte vlastní hodnotu, která bude mít maximální počet hodnot (v našem případě 20), ať se Vám nabídne vytvoření všech 20 proměnných.

Pokud budou adresy obrázků místo středníku ; používat jako oddělovač svislítko | , viz ukázka:

https://domena.cz/obrazek1.jpg|https://domena.cz/obrazek2.jpg|https://domena.cz/obrazek3.jpg atd.

tak stačí v regulárním výrazu nahradit středník ; za tento oddělovač, jenom se musí v regulárním výrazu zapsat jako escapovaný: \|, protože svislítko je samo o sobě regulární značkou vyjadřující NEBO, tak abychom rozlišili, že tady chceme hledat právě znak svislítka.

Ukázka zde: https://regex101.com/r/fBOtg1/7

Ještě přidám pár tipů na další možné oddělovače adres obrázků:

Mezery (hodnoty oddělené mezerou)

Pokud budou adresy obrázků místo středníku ; používat jako oddělovač mezeru , viz ukázka:

https://domena.cz/obrazek1.jpg https://domena.cz/obrazek2.jpg atd.

tak stačí v regulárním výrazu nahradit středník ; za regulární značku \s.
Ukázka zde: https://regex101.com/r/fBOtg1/8

Nové řádky (odřádkování, kdy jsou hodnoty pod sebou)

Pokud budou adresy obrázků místo středníku ; používat jako oddělovač nový řádek

, viz ukázka:

https://domena.cz/obrazek1.jpg
https://domena.cz/obrazek2.jpg

atd.

tak stačí v regulárním výrazu nahradit středník ; za regulární značku \n.
Ukázka zde: https://regex101.com/r/fBOtg1/9

Čárka (hodnoty oddělené čárkou)

Pokud budou adresy obrázků místo středníku ; používat jako oddělovač čárku , , viz ukázka:

https://domena.cz/obrazek1.jpg,https://domena.cz/obrazek2.jpg atd.

tak stačí v regulárním výrazu nahradit středník ; za čárku ,.
Ukázka zde: https://regex101.com/r/fBOtg1/10