molily: RegExp: Merkwürdiges Verhalten des IE bei replace

Beitrag lesen

Hallo,

Nun gibt es ja zum Glück reguläre Ausdrücke, dachte ich mir und wollte daher im ersten Schritt die Elementnamen wieder in kleingeschriebene Strings verwandeln:
ieValue = ieValue.replace(/<([A-Z]+)([^>]*?)>/ig, "$1".toLowerCase());

Auf die Schnelle, als über leftContext, lastMatch und rightContext zu gehen:

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);

MSIE kennt diese Eigenschaften ab Version 5.5.

Wahrscheinlich gibt es noch eine einfachere Lösung, ich suche später noch einmal. MSIE 5.0 kann z.B. lastIndex, vielleicht ließe sich der Rest daraus herleiten (leftContext als Teilstring bis zum lastIndex, lastMatch als RegExp.$1 durch eine Klammerung des gesamten regulären Ausdrucks, rightContext als Teilstring vom Ende von lastMatch bis zum Stringende).

Mathias