Andreas Dölling: RegExp: Merkwürdiges Verhalten des IE bei replace

Beitrag lesen

var str = "<A></A>...<A bla='a'>...</A>";
var expr = /</?([A-Z]+)([^>]*?)>/ig;
var erg;
while (erg = expr.exec(str)) {
  alert(RegExp.leftContext + '[' + RegExp.lastMatch + ']' + RegExp.rightContext + ' (' + expr.lastIndex + ')\n' +
  "Treffer: [" + RegExp.$1 + "] und [" + RegExp.$2 + "]");
  str = RegExp.leftContext + RegExp.lastMatch.toLowerCase() + RegExp.rightContext;
}
alert("Ergebnis: " + str);

Hallo,

aufbauend auf Deinen Vorschlag habe ich folgende Lösung für den IE entwickelt, die die in diesem Thread genannten Schwierigkeiten löst:

var ieValue = myContainerNode.innerHTML();
   var expr = /(.*?</?)([A-Z]+)([^>]*?>.*?)/g;
   var erg;
   while (erg = expr.exec(ieValue)) {
    ieValue = RegExp.leftContext + erg[1] + erg[2].toLowerCase() + erg[3] + RegExp.rightContext;
   }
   var expr = /([^>="]+)="?([^>\s"]+)"?/g;
   erg = new Array();
   while (erg = expr.exec(ieValue)) {
    ieValue = RegExp.leftContext + erg[1].toLowerCase() + '="' + erg[2] + '"' + RegExp.rightContext;
   }

Es bleibt ein kleines Problem: sollte in einem Text-Node ein String der Form Foo=Bar vorkommen, so wird er gnadenlos durch foo="Bar" ersetzt.

Das ist jetzt noch der einzige Schwachpunkt, den ich erkennen kann.
Lösung? Im Moment keine Idee.

Ciao,
Andreas