Daniel Thoma: reguläre Ausdrücke

Beitrag lesen

Hallo Carsten!

Mit regexp verfolgst Du den falschen Ansatz. Man kann den regulären Ausdruck zwar noch verbessern, damit weniger Fehler gemacht werden, aber eine verschachtelte Struktur wie HTML bekommt damit nicht richtig in den Griff.
Besser ist es, das Dokument zu Parsen und nur innerhalb aller Textknoten zu ersetzen. Dankbarer Weise hat der Browser Dir das Parsen schon abgenommen. So braucht man nur noch den DOM-Baum rekursiv zu durchlaufen:

function ersetzen(element, w1, w2) {
  for(var i in element.childNodes) {
    var node = element.childNodes[i];
    if(node.nodeType == 3) { // Text
      node.nodeValue = node.nodeValue.replace(w1, w2);
    }
    else if(node.nodeType == 1{ // Element
      ersetzen(node, w1, w2);
    }
  }
}

Anwenden sollte man die Funktion besser auf document.body als direkt auf document, da man sonst auch in style-Bereichen u.ä. ersetzt.
Außerdem sollte man evt auch noch script, textarea usw von der ersetzung ausnehmen.

Grüße

Daniel