Günter Marchewka: reguläre Ausdrücke zur Tabellenmanipulation

Guten Abend liebes Forum,
ich habe immer meine Probleme mit regulären Ausdrücken und habe mir deshalb folgende Aufgabe gestellt:
Auf eine Tabelle mit einer beliebigen Anzahl von Zeilen und Spalten, mit beliebigen Inhalten in den Zellen möchte ich folgende Operationen anwenden:

  • Zeilen Oben/Unten hinzufügen
  • Spalten Links/Rechts hinzufügen
  • Zeilen Oben/Unten entfernen
  • Spalten Links/Rechts entfernen
    Alles bekomme ich hin, nur unten in der Tabelle die letzte Zeile entfernen will und will mir nicht gelingen.
    Entweder kill ich die ganze Tabelle oder füge nur ein Zeichen hinzu.
    Kann mit jemand beim Denken einen Schubs geben? Ganz unten, die letzte Abfrage auf "UntenMinus" haut nicht hin.
    Hier mein bisheriges Ergebnis:
    function changeCellRange(mach)
    {
     if (!mach) alert('Fehler!\n\nWie konnte das angehen?\nDie Funktion changeCellRange wurde OHNE Übergabewert aufgerufen!\n\nDa stimmt was nicht mit der Programmierung.');

var neuCellZeile = '';
 var neuInhalt = '';
 if (mach == 'Neu')
    {
     document.all.oData.innerHTML = oDataData;
    }
 if (mach == 'LinksPlus')
    {
     neuInhalt = document.all.oData.innerHTML.replace(/<TR>/g,'<TR><TD><img src="Leer.gif"></TD>');
     neuCellZeile = aktCellZeile.replace(/<TR>/ig,'<TR><TD><img src="Leer.gif"></TD>');
     document.all.oData.innerHTML = neuInhalt;
     aktCellZeile = neuCellZeile;
    }
 if (mach == 'RechtsPlus')
    {
     neuInhalt = document.all.oData.innerHTML.replace(/</TR>/ig,'<TD><img src="Leer.gif"></TD></TR>');
     neuCellZeile = aktCellZeile.replace(/</TR>/ig,'<TD><img src="Leer.gif"></TD></TR>');
     document.all.oData.innerHTML = neuInhalt;
     aktCellZeile = neuCellZeile;
    }
 if (mach == 'ObenPlus')
    {
     neuCellZeile = aktCellZeile + '<TR>';
     neuInhalt = document.all.oData.innerHTML.replace(/<TR>/i,neuCellZeile);
     document.all.oData.innerHTML = neuInhalt;
    }
 if (mach == 'UntenPlus')
    {
     neuCellZeile = aktCellZeile + '</TABLE>';
     neuInhalt = document.all.oData.innerHTML.replace(/</TABLE>/i,neuCellZeile);
     document.all.oData.innerHTML = neuInhalt;
    }
 if (mach == 'ObenMinus')
    {
     neuInhalt = document.all.oData.innerHTML.replace(/(</TR>)/i,'#').replace(/<table[^>]*>/i,'µ').replace(/µ[^#]*#/i,'<table id=oTable cellpadding=0 cellspacing=0>');
     document.all.oData.innerHTML = neuInhalt;
    }
 if (mach == 'LinksMinus')
    {
     neuInhalt = document.all.oData.innerHTML.replace(/<TR>/ig,'#').replace(/</TD>/ig,'µ').replace(/#[^µ]*µ/ig,'<TR>').replace(/µ/ig,'</td>');
     document.all.oData.innerHTML = neuInhalt;
    }
 if (mach == 'RechtsMinus')
    {
     neuInhalt = document.all.oData.innerHTML.replace(/</TR>/ig,'#').replace(/<TD>/ig,'µ');
     neuInhalt = neuInhalt.replace(/µ.+#/ig,'</TR>');
     neuInhalt = neuInhalt.replace(/µ/ig,'<TD>');
     document.all.oData.innerHTML = neuInhalt;
    }
 if (mach == 'UntenMinus')
    {
     neuInhalt = document.all.oData.innerHTML.replace(/</TABLE>/ig,'#').replace(/<TR>/ig,'µ');
     neuInhalt = neuInhalt.replace(/(µ.+#)/i,'</TABLE>');
     neuInhalt = neuInhalt.replace(/µ/ig,'<TR>');
     document.all.oData.innerHTML = neuInhalt;
    }
 oTable.onclick = onclickCell;
 document.onclick = cancelSelect;
}
Mit dem Code für "UntenMinus" soll eine Struktur wie
<tr><td>blabla...</td><td>...</td><td>viele Zellen...</td></tr></tbody></table>
gewandelt werden in </table>

Danke für das Interesse!
Günter

  1. Hallo Günther

    nein, dass ist keine Lösung deines Problemes, sondern einfach ein neuer Ansatz. Deinem Script entnehme ich, dass du sowieso nur für den IE schreibst.
    Warum nutzt du dann nicht die wirklich praktischen Methoden des Tabellenobjektes?

    http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/table.asp

    Die arbeiten wirklich zuverlässig.

    Viele Grüße

    Antje

    1. Hallo Antje,

      Warum nutzt du dann nicht die wirklich praktischen Methoden des Tabellenobjektes?

      http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/objects/table.asp

      Die arbeiten wirklich zuverlässig.

      Ja da hast du Recht.
      Dort gibt es ein sehr schönes Beispiel mit einem Puzzle, durch das ich auch bereits durchgegangen bin.

      Die Ausrichtung meines Beispiels liegt nicht unbedingt darin, das ich etwas mit Tabellen machen wollte, sondern besser die regulären Ausdrücke und ihre Funktionsweisen verstehen möchte.
      Im Beispiel nur IE ist richtig, da ich auf diesem Rechner nur IE5.0 habe, nutze ich document.all. Die Änderung in getelementsbyid um es im Netscape6 oder IE5.5 zum Laufen zu bringen ist relativ geringfügig.
      Nach meinen ersten _Erfolgen_ mit hinzufügen und entfernen war ich fast der Meinung, nun hab ich es, aber irgendwie doch nicht...

      Na ja, auf jeden Fall Danke für Dein Interesse!
      Viele Grüße
      Günter