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.

6 Likes

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

4 Likes

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

1 Like