Pomoc s JS regexom

Pomoc s JS regexom
« kdy: 10. 08. 2024, 23:19:43 »
Robim vlastny markdown token pre citacie, podobne ako je tu vo fore vlastne, a potrebujem s JS najst nasledovny text
Kód: [Vybrat]
[quote uid=123 name=John Doe timestamp=123456]foo bar baz[/quote]

Kedy atributy su nepovinne(uid, name, timestamp) a citacia moze mat dalsie citacie, alebo ine markdown tagy v sebe. Z toho potrebujem vytiahnut atributy a obsah, ktory sa nasledne este moze tokenizovat(tzn rekurzivne to spracuje aj vnorene citacie).

Co som sa s tym hral, tak problem je primarne s tym aby sa spravne zvolil otvaraci a zatvaraci tag, aj ked text obsahuje dalsie citacie. Cize ak mam

Kód: [Vybrat]
[quote] <-- prvy otvaraci
abc
  [quote]
    def
      [quote]ghi[/quote]
  [/quote]
[/quote] <-- posledny zatvaraci

tak aby sa vybral len ten vonkajsi a tie vnorene dve citacie aby sa vytiahli len ako text, ktory sa zase dalej spracuje.

Cize otvaraci tag moze byt nieco ako
Kód: [Vybrat]
(\[code.*\]), akurat ze
Kód: [Vybrat]
.* nie je uplne idealne na vytiahnutie tych atributov lebo to moze preskocit hocikam dalej kym nenajde zatvaraciu
Kód: [Vybrat]
]. Lenze davat tam ignorovanie s
Kód: [Vybrat]
^ nie je uplne jednoduche. Zatvarci je lahky, len
Kód: [Vybrat]
(\[\/code\]), ale ten stred by mal brat vsetko, lenze sa zaskene na vnorenom tagu, ci uz otvaracom alebo zatvaracom.

Neviem ako to spravne poriesit, regex je dost veda proste.


Re:Pomoc s JS regexom
« Odpověď #1 kdy: 10. 08. 2024, 23:53:25 »
Tohle se nedá řešit regulárními výrazy. Gramatika takovýchto značkovacích je moc složitá na to, aby se to dalo řešit regulárními výrazy.

Na skutečný Markdown je spousta parserů v JavaScriptu. To, co se používá tady, není Markdown. Ale i kdybyste chtěl použít jiný formát, bude lepší použít na to nějaký už hotový parser. Nebo se dá samozřejmě napsat vlastní parser (ideálně s nějakou knihovnou), ale jen s pomocí regulárních výrazů to určitě nejde.

mikrom

  • ****
  • 357
    • Zobrazit profil
    • E-mail
Re:Pomoc s JS regexom
« Odpověď #2 kdy: 11. 08. 2024, 00:30:26 »
Tak napriklad z tohoto
Kód: [Vybrat]
[quote uid=123 name=John Doe timestamp=123456] <-- prvy otvaraci
abc
  [quote]
    def
      [quote]ghi[/quote]
  [/quote]
[/quote] <-- posledny zatvaraci
sa extrahuje vnutro, t.j. toto
Kód: [Vybrat]
<-- prvy otvaraci
abc
  [quote]
    def
      [quote]ghi[/quote]
  [/quote]
regularnym vyrazom
Kód: [Vybrat]
/\[quote.*\]([\s\S]*)\[\/quote\]/m

tecka

  • ***
  • 149
    • Zobrazit profil
    • E-mail
Re:Pomoc s JS regexom
« Odpověď #3 kdy: 11. 08. 2024, 05:49:14 »
...sa extrahuje vnutro...
Nebo taky ne.
Kód: [Vybrat]
[quote uid=123 name=John Doe timestamp=123456]
to
  [quote]
      je
      [quote]ale[/quote]
  [/quote]
[/quote]
k
[quote]
nicemu
[/quote]

Regex matcher není parser, už to Filip napsal. Můžeš ho použít, ale sám o sobě na to nestačí.

Re:Pomoc s JS regexom
« Odpověď #4 kdy: 11. 08. 2024, 09:20:19 »
Po zvazeni som sa rozhodol ze to nema zmysel moc riesit, prvivela roboty a komplexity. Necham to ako je, akurat pridam novy markdown tag pre linkovanie usera a to je cele.


mikrom

  • ****
  • 357
    • Zobrazit profil
    • E-mail
Re:Pomoc s JS regexom
« Odpověď #5 kdy: 11. 08. 2024, 12:26:09 »
Jedna sa o markup jazyk BBCode a na parsovanie existuju kniznice pre rozne programovacie jazyky.

Re:Pomoc s JS regexom
« Odpověď #6 kdy: 12. 08. 2024, 11:00:07 »
Nebudem zakladat novu temu lebo sa to tyka uz spomenutych veci, ale zaujimalo by ma ake su vzorce pre vlastne znacky pre markdown? Ja totiz, ako je spomenute vyssie, tak nejak mentalne defaultujem na bbcode format. Napriklad mam link na uzivatela ktory je [user=...]meno[/user]. Lenze to nie je markdown ale neviem ako inak to poriesit.

Bloky vidim ze sa casto robia ako:
::: nieco {doplnkova konfiguracia}
...obsah
:::

ale pre inline elementy som nevidel zatial ziadne zauzivane vzorce. Mate napad na nieco jednoduche co umoznuje pouzit viac nez jeden atribut? Cize je jednoduche urobit @user, ale @Nejake Meno uz to rozbija napriklad a uz duplom tomu chyba uid.

Re:Pomoc s JS regexom
« Odpověď #7 kdy: 12. 08. 2024, 13:49:38 »
Tohle se nedá řešit regulárními výrazy. Gramatika takovýchto značkovacích je moc složitá na to, aby se to dalo řešit regulárními výrazy.

Tohle se reguláry řešit dá, ale ne v JavaScriptu, protože tam nejsou rekurze ani balancing groups.

mikrom

  • ****
  • 357
    • Zobrazit profil
    • E-mail
Re:Pomoc s JS regexom
« Odpověď #8 kdy: 12. 08. 2024, 16:40:02 »
tych markup jazykov je viac a mierne sa lisia, napr. na fore kam chodim sa pouziva TGML:
https://tipmaster.com/includes/tgmlinfo.cfm

mikrom

  • ****
  • 357
    • Zobrazit profil
    • E-mail
Re:Pomoc s JS regexom
« Odpověď #9 kdy: 12. 08. 2024, 16:42:06 »
neuviedol si aky JavaScript na to ides pouzit: Node.js alebo v browseri, alebo co ine?

mikrom

  • ****
  • 357
    • Zobrazit profil
    • E-mail
Re:Pomoc s JS regexom
« Odpověď #10 kdy: 12. 08. 2024, 18:01:22 »
Tohle se nedá řešit regulárními výrazy. Gramatika takovýchto značkovacích je moc složitá na to, aby se to dalo řešit regulárními výrazy.

Tohle se reguláry řešit dá, ale ne v JavaScriptu, protože tam nejsou rekurze ani balancing groups.

tiez si myslim, ze pre Perl to nebude problem

alex6bbc

  • *****
  • 1 617
    • Zobrazit profil
    • E-mail
Re:Pomoc s JS regexom
« Odpověď #11 kdy: 12. 08. 2024, 18:33:16 »
Tohle se nedá řešit regulárními výrazy. Gramatika takovýchto značkovacích je moc složitá na to, aby se to dalo řešit regulárními výrazy.

Tohle se reguláry řešit dá, ale ne v JavaScriptu, protože tam nejsou rekurze ani balancing groups.

tiez si myslim, ze pre Perl to nebude problem

to je teda reseni.

tak pouzij ten javascript, ale zkombinuj regex s kodem pro rozsekani struktury na uzly.