werndt: RegEx für einen Parser

Beitrag lesen

N'abend Olaf,

Du könntest vielleicht folgendes probieren:

<html>
<head>
<title>span_replace_IE_moz_opera7</title>
<script type='text/javascript'>
var d=document, r=RegExp;

onload=function ()
{var i=o=d.body.innerHTML;

o=R(o,/[\n|\r]/g,'~zz~');                                              // Zeilenumbrüche ersetzen - wg IE & opera7 vs moz

while(o.match(/((<span>)([^<]*)(?:<)([^>]+)(?:>)((?:.(?!<span>))*)(</span>))/i))with(r)o=R(o,$1,$2+$3+'['+$4+']'+$5+$6);

o=R(R(R(o,/(?:~zz~)+/g,'\n'),/[SPAN]/ig,'<SPAN>'),/[/SPAN]/ig,'</SPAN>');                     // und wieder einfügen

alert(i+'\n\n'+o);
};

function R(r0,r1,r2){return r0.replace(r1,r2)};
</script>

</head>
<body>
<span><q>Hallo,ich
möchte ein HTML-Dokument wie folgt
modifizieren:</q></span>Bei allen Tags, die innerhalb eines Span-Containers stehen,
<span><tt id='QUER'>qwer</tt><i class='gansqwer'>gans
qwer</i></span><div>wuff</div>
<span><big>sollen die spitzen durch eckige Klammern<q> hargngrmph </q>
ersetzt werden
</big></span>
<span><samp>Aus</samp></span>
<div>maus</div><span><acronym>1</acronym><strong >22</strong ><cite>333
</cite></span><div>klaus</div>soll also
<div>ei der</div><span>[][][]</span><div>daus</div>
werden.
<div>soso</div><span><dfn>quadsch</dfn><em>mit</em><abbr>sauce</abbr></span>
quargl quurgl
<div>nanu</div><span><small>asdf</small><kbd>yxcv</kbd></span><div>schrömpf</div>
Kann ich sowas mit einer RegEx abhandeln? Wenn ich<span>.*(<)([^>]*)(>).*</span>/gi
schreibe (Code ungeprueft), wird ja nur das erste Vorkommen
<div>klabau</div><span><b id='totalQWER'>dodalqwer</b><i class='vullkummeqwer'>VULLKUMMEqwer</i></span><div>termann</div>
innerhalb des span-Bereiches gefunden.Any ideas?Gruss Olaf SchneiderP.S.: Ach ja, ich bin auf die RegEx von Javascript angewiesen
</body>
</html>

Geprüft hab' ich jetzt nur in moz1.2, phoenix0.5, nn7, opera7 und IE6.

gruß

werndt