Hendrik Reimers: RegExp Problem

Hi,

ich möchte einen String mit HTML Tags etwas abändern.
Zum Teil klappt das auch. Allerdings kommt es häufig vor,
dass zu wenig geändert wird. Also nur beim ersten mal und alle
weiteren ändern sich nicht.

Hier mal den String als Beispiel:
<DIV ALIGN="LEFT"><SPAN style="color: #000000;font-size: 12px;font-family: Arial;">Dies ist ein kleiner <SPAN style="color: #FF0000;"><B>Test</B></SPAN></SPAN></DIV>

...und hier mal meine Versuche:
    newText = newText.replace(/<SPAN style="color: (#[0-9a-z]{6});font-size: ([0-9]*)px;font-family: ([a-z]*);">/gi,'<FONT color="$1" size="$2" face="$3">');
    newText = newText.replace(/</SPAN>/gi,'</FONT>');

Alternativ hatte ich es auch mit ner WHILE Schleife versucht
indem ich mit search() geguckt habe ob noch ein SPAN Tag zu finden ist
und dann nochmal die Funktion rüber gejagt. Aber entweder gab es keine
Verbesserungen, oder bei leichten Abänderungen des RegExp entstand eine Endlosschleife :-(

Hoffe Ihr könnt mir helfen!

Danke!
Gruß Hendrik

  1. Hallo,

    ich kann jetzt nicht beurteilen, wie sinnvoll Dein Ansatz ist und ob Du die Möglichkeit hast, auf FONT-Elemente zu verzichten.
    Daher beschränke ich mich mal auf Deine konkrete Frage.
    Ändere den regulären Ausdruck so ab:
    /<SPAN (?:style="color:\s*(#[0-9a-z]{6});)?(?:font-size:\s*([0-9]*)px;)?(?:font-family:\s*([a-z]*);)?">/gi

    In Deinem Beispiel-String wurde nämlich mit Deinem regulären Ausdruck nur der erste SPAN erwischt. Auf den zweiten SPAN-Tag paßte Dein Ausdruck nicht, da er das Vorhandensein der Attribute color, font-size und font-family zwingend voraussetzte.
    Um dies zu verhindern, müssen diese Teilausdrücke mit '?' auf  optional gesetzt werden: z.B. (style="color:\s*(#[0-9a-z]{6});)?
    Damit diese zusätzliche Klammer nun nicht als Teilergebnis gemacht wird, fügst Du das '?:' hinzu: (?:style="color:\s*(#[0-9a-z]{6});)?

    Ach so, das '\s*' sorgt dafür, daß Du auch SPAN-Tags findest, bei denen zwischen dem Namen der CSS-Eigenschaft und dem Wert keines oder mehrere Leerzeichen stehen.

    Ciao,
    Andreas

    --
    "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)