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