Nihtan: RegExp: 4 bringen keine Treffer; keine Fehlermeldungen

Hi,
ich weiß, dass dies dämlich klingt, aber 3 meiner RegExps werden einfach entweder ignoriert oder falsch interpretiert.
Am Anfang dachte ich, der WIE will mich wiedermal auf'n Arm nehmen, doch nachdem ich's im MZFF auch getestet hab (mit dem gleichen Ergebnis), bin ich am "verzwiebeln". Ich probier schon ewig dran herum, doch funzn tut's trotzdem nicht.

Es geht in meinem Script darum, dass ich eine JS-manipulierte Textarea mit der Größe automatisch an den darin liegenden Text anpasst.
Dabei dividiere ich die Textlänge durch 60 (Maximalzeichenanzahl bei Textarea mit IE-Geisterscrollbalken pro Zeile bei meiner Breite). Das dann mal 14 (Zeilenhöhe) plus 28 Spatze.
Das einzige Problem sind Zeilenumbrüche. Denn diese verbrauchen ja nach einer vollen Zeile keinen Platz, aber in einer Zeile mit nur wenig Zeichen viel Platz (halt die Restzeile). Da hab ich mir etwas einfallen gelassen, doch da liegt ja der Hund begraben.
Jetzt hab ich zu Testzwecken das Script leicht umgebaut, damit man die Vorgänge mitverfolgen kann.

Funktion:

function addZeile() {  
  var sechzig = '                                                            '; //Um später Zeilenumbrüche mit der richtigen Anzahl von Leerenzeichen ersetzten zu können.  
  var Inhalt = eingabe.value.replace(/\n\n/g,sechzig+sechzig); // Funzt ned.  
  Inhalt1 = Inhalt.replace(/(\n|                                                            )(.{41,60}?)\n/g,'$1$2'+sechzig.slice(5)); //Funzt nicht.  
  Inhalt2 = Inhalt1.replace(/(\n|                                                            )(.{21,40}?)\n/g,'$1$2'+sechzig.slice(25)); //Funzt nicht.  
  Inhalt3 = Inhalt2.replace(/(\n|                                                            )(.{1,20}?)\n/g,'$1$2'+sechzig.slice(45)); // Auch nicht.  
  Inhalt4 = Inhalt3.replace(/\n/g,sechzig.slice(5)); //Das funzt wieder.  
  Zaehl+=1; //Counter, der am Anfang auf 0 steht, wird erhöht.  
  if(!(Zaehl % 8)) //Jedes 8. mal wird der Zwischenstand ausgegeben  
    alert(Inhalt.replace(/ /g,':').replace(/\n/g,'(((((((() ERRRRORRRR ())))))') + '\n\n\n\n'+Inhalt1.replace(/ /g,':').replace(/\n/g,'(((((((() ERRRRORRRR ())))))') + '\n\n\n\n\n\n'+Inhalt2.replace(/ /g,':').replace(/\n/g,'(((((((() ERRRRORRRR ())))))') + '\n\n\n\n\n\n'+Inhalt3.replace(/ /g,':').replace(/\n/g,'(((((((() ERRRRORRRR ())))))') + '\n\n\n\n\n\n'+Inhalt4.replace(/ /g,':').replace(/\n/g,'(((((((() ERRRRORRRR ())))))') + '\n\n\n\n\n\n');  
  eingabe.style.height = (Inhalt4.length / 60 * 14 + 28)+'px'; //Höhe wird angewendet.  
}

Aufruf:
<... onkeydown="setTimeout('addZeile()',10)" ...>

Verbesserungsvorschläge am Script sind herzlich willkommen; das Problem ist mir jedoch natürlich wichtiger als der "Feinschliff".

Thx im Vorraus;
Nihtan.

  1. Hi,

    Es geht in meinem Script darum, dass ich eine JS-manipulierte Textarea mit der Größe automatisch an den darin liegenden Text anpasst.

    Dafür halte ich RegExp für ziemlich ungeeignet.

    Dabei dividiere ich die Textlänge durch 60 (Maximalzeichenanzahl bei Textarea mit IE-Geisterscrollbalken pro Zeile bei meiner Breite). Das dann mal 14 (Zeilenhöhe) plus 28 Spatze.
    Das einzige Problem sind Zeilenumbrüche.

    Das grösste Problem dürften die Umbrüche sein, die zwar in der Anzeige des Textinhaltes vorgenommen werden, aber nicht wirklich physisch im value vorhanden sind ...

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hi,
      erstmal Danke für die beiden Antworten.

      Das grösste Problem dürften die Umbrüche sein, die zwar in der Anzeige des Textinhaltes vorgenommen werden, aber nicht wirklich physisch im value vorhanden sind ...

      Dies kann aber nicht sein, da nur die ersten 3 ignoriert werden. Beim Einfachen (Inhalt3.replace(/\n/g,sechzig.slice(10))) funzts ja. Nur bei den 3 Komplexeren nicht.

      »»~~~javascript var lines=mytextarea.value.split("\n");        //1

      var fieldlen=0;                                //2
      for (var l=0; l<lines.length; l++)             //3
         fieldlen += Math.ceil(lines[l].length/60);  //4

      Die Lösung von LX hat mir jedoch sehr gut gefallen.  
      Ich will zwar nicht die Zeilen, sondern den Restplatz in der Zeile auslesen; das lässt sich aber mit `lines[l].length % 60`{:.language-javascript} ect. in Zeile 4 auch errechnen.  
        
      lg Nihtan 
      
  2. Nichts für ungut, aber Du verwendest regexp für Aufgaben, für die sie keine Lösung darstellen.

    Anzahl der Umbrüche in einem String feststellen? value.split("\n").length. Das so erstellte Array kannst Du übrigens auch nach Zeilenlängen durchsuchen:

    var lines=mytextarea.value.split("\n");  
    var fieldlen=0;  
    for (var l=0; l<lines.length; l++) {  
       fieldlen += Math.ceil(lines[l].length/60);  
    }
    

    Jetzt ist in der Variablen fieldlen die Anzahl der Zeilen einer Textarea, in der ein automatischer Umbruch aktiv ist.

    Gruß, LX

    --
    RFC 1925, Satz 3: Mit ausreichendem Schub fliegen Schweine wunderbar. (...)
    1. @@LX:

      nuqneH

      Nichts für ungut, aber Du verwendest regexp für Aufgaben, für die sie keine Lösung darstellen.

      http://community.de.selfhtml.org/zitatesammlung/zitat1418

      Qapla'

      --
      Bildung lässt sich nicht downloaden. (Günther Jauch)