Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Javascript-Regexp will nicht so wie ich (https://www.delphipraxis.net/67657-javascript-regexp-will-nicht-so-wie-ich.html)

alcaeus 18. Apr 2006 09:44


Javascript-Regexp will nicht so wie ich
 
Hallo ihr,

ja, RegExps und Scriptsprachen habens mir angetan, aber langsam verliere ich die Geduld. Ich bekomme einen Text in einer Javascript-Variable, der auch Zeilenumbrueche enthalten kann. Es ist ein XML-File mit dem der DOM-Parser nicht ganz zurecht kommt.
Nun will ich es so parsen:
Code:
var res = response.match(/\<(.+)\>(.+)\<\/(.+)\>/gm);
Da muesste er folgende Tags finden: result, postid, editmessage, message und rawmessage. Die letzten beiden werden aber nicht erkannt; wahrscheinlich weil sie auch Zeilenumbrueche (\n) enthalten. Also habe ich es so probiert:
Code:
var res = response.match(/\<(.+)\>([.\s]+)\<\/(.+)\>/gm);
Da hat er mir dann nur noch die Tas gefunden, welche ein Leerzeichen enthalten haben; die ohne Leerzeichen hat er geschickt ignoriert :wall:

Kann mir jemand vielleicht einen (kleinen) Schubs in die richtige Richtung geben? Langsam verzweifle ich noch mit diesem JS-Zeugs da :roll:

Greetz
alcaeus

Khabarakh 18. Apr 2006 10:25

Re: Javascript-Regexp will nicht so wie ich
 
Hehe, das ist ziemlich fies ;) .
Der Punkt wird in character classes nicht als Metacharakter erkannt, sondern als das, was er ist: ein Punkt.
Neben Tags mit Leerzeichen müssten also mit deinem letzten Regex auch Tags wie <a>.</a> gefunden werden.
Zitat:

Zitat von http://www.regular-expressions.info/dot.html#nodotall
JavaScript and VBScript do not have an option to make the dot match line break characters. In those languages, you can use a character class such as [\s\S] to match any character.

Wahrscheinlich musst du dann noch auf ungreedy umstellen, sonst wird nur ein riesiges Tag gefunden.

alcaeus 18. Apr 2006 14:13

Re: Javascript-Regexp will nicht so wie ich
 
Hallo,

das war der entscheidende Tipp, jetzt funktionierts:
Code:
var res = response.match(/\<response\>((.|\s)+?)\<\/response\>/gm);
Danke :)

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz