Toon posts:

[js] regexp met nested UBB

Pagina: 1
Acties:

Verwijderd

Topicstarter
op mij alleraardigste forumpje waarvan de URL niet zo ter zake doet kan men net als in elk ander forumpje de boel opleuken met UBB tags, tenminste dat is de bedoeling. nu kunnen die tags genest zijn, bijvoorbeeld in:
code:
1
2
3
4
5
6
7
8
9
10
[ b ][ u ]lalalatext[ /u ][ /b ] edit: ik zie dat react er ook 
moeite mee heeft, daarom spaties erin :P
dat moet dan netjes omgezet worden in: 
<b><u>lalalatext</u></b>

maar als je nu bijvoorbeeld [code][ b ]lalalatext[ /b ][/code] hebt,
moet die [ b ] niet worden omgezet. 

vergelikbaar hieraan is een replace die van urls links maakt, 
dat gaat dus fout bij [img] tags, want daar moet het niet


op de een of andere manier moet ik dus een stukje text markeren als het bijvoorbeeld een [code] of een [img] is. dmv de lambda functie in de replace method kan je heel wat doen, de vraag is alleen wat. ik heb al zitten denken aan die substrings opslaan in een array ofzo en dan iedere keer kijken

iemand voorbeeldjes? (de knowledgebase van de buren hielp niet echt)

  • André
  • Registratie: Maart 2002
  • Laatst online: 01-09 14:07

André

Analytics dude

Ik denk als je een goede volgorde verzint voor het replacen ben je al een heel eind. Want dan vervang je eerst de url's waar een [ img ] omheen staat, daarna vervang je de url's die overblijven door een link.

En voor geneste tags moet je gewoon checken of ervoor een [ code ] of wat anders staat terwijl die nog niet afgesloten is met [ /code ].

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Er zijn een aantal mogelijkheden

1. Stackbased parsen
Wat je hierbij doet, is een stack-entry pushen, elke keer wanneer er een tag geopend wordt, en die in die context toegestaan is. Als je dan een sluittag tegenkomt die in die context mag, wordt de stack-entry gepopped, en gekeken of de tags van gelijke aard zijn, zo ja, dan is de syntax correct, en wordt de tag toegepast op de text die er tussen gevonden is. Als je dit recursief aanpakt, heb je een stack-based parser :)

2. Je replaced alle code tags met een (bijvoorbeeld md5) hash. Die hash zet je in een associative array, die je koppelt aan het html-resultaat ervan. Vervolgens parse je alle andere tags, en aan het eind vervang je de hash in de string weer met de waarde van de hash (het html-resultaat dus) in de associative array.
edit:

over stackbased parsen kun je in P&W een hoop vinden

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
reactie op yogho:

1) [img]"http://www.domein.nl/plaatje.gif"[/img] zit een URL in dus zou dan nog een link van worden gemaakt

2) hij vervangt nu in 1 keer beide code tags; regexp: /\\[code\](.*)\\[\/code\]/gi ik heb geen idee hoe ik het anders zou moeten doen (anders pakt ie ook niet-afgesloten tags mee met allerlei rare gevolgen van dien)

reactie op drm: wat een taal, ik moest drie keer lezen :P, maar ik denk dat ik daar wel wat mee kan, ga even op nieuwe keywords googelen en prutsen