Toon posts:

[js]Regular expressions werken soms wel, soms niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een simpele HTML-parser gebouwd, die berichten op fora terug kan parsen naar zgn. SML die door dat forum gebruikt wordt.

Onderdeel van deze parser is het blokkeren van quote-embedding, en daar gaat het mis. Om de een of andere reden werkt dat bij sommige mensen niet helemaal lekker. Een voorbeeldje van een post met een quote erin (de HTML code)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<td class="msg" colspan="2"><hr><blockquote>
<span style="font-size: 10px;">quote:</span><div class="quote">
<b>Op <a href="http://forum.fok.nl/topic/695550/1/500#27217810" target="_blank">
zaterdag 21 mei 2005  16:03</a> schreef HuHu het volgende:</b><br><br>[..]<br>
<br>Volgens mij gaat er nog iets mis, jij post zeker met de WYSIWYG editorvoor
Fok!, omdat er van die spaties verdwijnen en ik HTML codeertussendoor
zie.</div></blockquote> Nee, dat heeft niets met die WYSIWYG editor te
maken. Dat die spaties verdwijnen had ik ook al opgemerkt. En die
HTML-code is al door iemand anders gerapporteerd.<br><br>Dat
spatieprobleem heb ik hier ook, dat ga ik sowieso oplossen. Alleen, ik
krijg niet van die HTML-code's zoals jij, ik kan de bug niet
reproduceren, dus is dat erg moeilijk op te lossen. Als ik namelijk op
die post klik, krijg ik gewoon een nette quote (zoals je ziet omdat ik
dezelfde post had gequote). Ik ga er sowieso naar kijken. Zou je die
foute quote alsjeblieft willen laten staan?<br><br>Edit: mijn WYSIWYG editor post smilies
echt niet als afbeeldingen hoor, dat wordt netjes omgezet naar smilie-codes.</td>
 [img]"http://images.fok.nl/s/smile.gif"[/img]


Zoals je ziet staat de quote tussen <blockquote> tags. Ik heb daarom de volgende regular expression gemaakt:

code:
1
msg=msg.replace(/<blockquote>(.|\n)+?<\/blockquote>/gi, '\n[..]\n\n');


Dit werkt bij mij prima, maar bij windows gebruikers werkt het soms wel, en soms niet. Bovenstaan de post werkt bijvoorbeeld bij iemand anders weer niet.

De browser waar het om gaat is Firefox.

Heeft iemand enig idee waar dit aan kan liggen?

[ Voor 10% gewijzigd door Verwijderd op 21-05-2005 16:35 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

de dot matched in sommige browsers (waaronder firefox en opera) ook geen linefeed; probeer het eens zo:
JavaScript:
1
msg=msg.replace(/<blockquote>(.|[\r\n])+?<\/blockquote>/gi, '\n[..]\n\n');

Intentionally left blank


Verwijderd

Topicstarter
Voor zover mij bekend gebruikt Firefox geen linefeed bij nieuwe regels. Als ik dat er inzet, werkt het helemaal niet meer.

Wat ik ook zo vreemd vind is dat dit niet een browserverschil zou moeten kunnen zijn. Het is namelijk een Firefox extensie, en draait dus ook alleen daarin. Ik zou er toch vanuit moeten kunnen gaan dat als het bij mij werkt, het bij andere Fx gebruikers ook werkt?

[ Voor 11% gewijzigd door Verwijderd op 22-05-2005 11:39 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op zondag 22 mei 2005 @ 11:38:
Voor zover mij bekend gebruikt Firefox geen linefeed bij nieuwe regels. Als ik dat er inzet, werkt het helemaal niet meer.
Toch wel hoor, maar dat is niet browser-afhankelijk maar OS-afhankelijk. Het ligt er ook een beetje aan hoe je die messagecontent ophaalt. Doe je dat bijvoorbeeld met innerHTML? Als er in de sourcecode dan linefeeds staan, dan krijg je die in je innerHTML ook gewoon terug.
Verder is het vreemd dat mijn aangepaste versie niet zou werken, hier werkt het prima in een simpele testopzet.

Misschien zit je probleem dan dus ergens anders in het geheel...

Intentionally left blank


Verwijderd

Topicstarter
Ik heb er nu maar dit:

code:
1
msg=msg.replace(/<blockquote>(.|\n|\r)+?<\/blockquote>/gi, '\n[..]\n\n');


van gemaakt, dan zou het sowieso moeten werken, ongeacht of er \r's in voorkomen. Het blijft hier gewoon werken, nu maar weer afwachten of het werkt voor de windows-usertjes.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

code:
1
(.|\n|\r)

is exact hetzelfde als
code:
1
(.|[\r\n])

hoor ;)

Intentionally left blank


Verwijderd

Topicstarter
Dan heb ik waarschijnlijk iets fout gedaan toen ik jouw code ging proberen. :|

Want nu werkt het wel, ik wacht alleen nog op resultaten van gebruikers.

[ Voor 33% gewijzigd door Verwijderd op 23-05-2005 12:50 ]

Pagina: 1