Kalle_B: replace mit Variablen

Hallöle,

ich möchte in einer HTML- Seite bestimmte Zeichenfolgen durch andere ersetzen. Dazu habe ich ein Array mit den alten und neuen Zeichenfolgen:

var feiertage = new Array (
 new Array ( '1. Mai', '1. Mai - Maifeiertag' )
,new Array ( '9. Mai', '9. Mai - Muttertag' )
);

Nun habe ich aber nicht gefunden, wie man replace() mit einer Variablen benutzen könnte, zumindest nicht  http://de.selfhtml.org/javascript/objekte/regexp.htm@title=hier.

Dieses führt nicht zum Austausch der Zeichenfolgen:
// Feiertage ergaenzen
for ( i=0; i<feiertage.length-1; i++ )
{
  document.getElementById('kalender').innerHTML
  = document.getElementById('kalender').innerHTML.replace(/feiertage[i][0]/g, feiertage[i][1]);
}

Wie sage ich dem replace(), dass ich eine Variable meine?

Gruß,
Kalle

  1. Du kannst replace auch direkt mit einem String verwenden: .replace(var1, var2) oder aber eine RegExp dynamisch über das entsprechende Objekt generieren, falls eine RegExp notwendig ist: .replace(new RegExp(var1), var2).

    Gruß, LX

    --
    RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
    1. Du kannst replace auch direkt mit einem String verwenden: .replace(var1, var2)

      Diese Information fehlt in der http://de.selfhtml.org/javascript/objekte/string.htm#replace@.replace() Dokumentation von SelfHZML

      Und dennoch, es funktioniert nicht. Möglicherweise habe ich etwas übersehen?

      Drucke einen Kalender mit 5 Nutzen, also jeder Tag des Monats kommt fümfmal vor. Das "Original":

      <p class=tag>wotag1, 1. monatsname</p>  
      <p class=tag>wotag1, 1. monatsname</p>  
      <p class=tag>wotag1, 1. monatsname</p>  
      <p class=tag>wotag1, 1. monatsname</p>  
      <p class=tag>wotag1, 1. monatsname</p>  
      ...
      

      Und nun geht's los mit dem Replace:

      // Monatsname einsetzen (klappt)  
      document.getElementById('kalender').innerHTML = document.getElementById('kalender').innerHTML.replace(/monatsname/g, monatsname);  
        
      // Wochentage einsetzen (klappt)  
      document.getElementById('kalender').innerHTML = document.getElementById('kalender').innerHTML.replace(/wotag1/g, wotage[0]);  
      ...  
      // Feiertage ergaenzen (klappt nicht)  
      var feiertage = new Array (  
       new Array ( ' 1. Mai', '1. Mai - Maifeiertag' )  
      ...  
      }  
      var suchen = new RegExp();  
      for ( i=0; i<feiertage.length-1; i++ )  
      {  
        suchen = RegExp( feiertage[i][0] )+'g';  
      alert ( suchen );  
        document.getElementById('kalender').innerHTML  
        = document.getElementById('kalender').innerHTML.replace( suchen, feiertage[i][1] );  
      }
      

      Was läuft falsch?

      Gruß, Kalle

      1. // Feiertage ergaenzen (klappt nicht)

        Warum machst du das nicht auf dem Server? Das dürfte einfacher gehen.

        var feiertage = new Array (
        new Array ( ' 1. Mai', '1. Mai - Maifeiertag' )
        ...
        }

        var suchen = new RegExp();

        Die Zeile ist überflüssig.

        for ( i=0; i<feiertage.length-1; i++ )

        Mit dieser Schleife läßt du den letzten Eintrag im Array aus. Ist das Absicht?

        {
          suchen = RegExp( feiertage[i][0] )+'g';
        alert ( suchen );

        Und was wird dir hier ausgegeben?

        Was läuft falsch?

        Du ignorierst die Fehlermeldungen?

        Struppi.

        1. Warum machst du das nicht auf dem Server? Das dürfte einfacher gehen.

          Der Server gibt einen ganz normalen Veranstaltungskalender aus. Den mache ich Client-seitig zur Druckvorlage, recht komplizierte Reihenfolge für ein geheftetes Büchlein.

          for ( i=0; i<feiertage.length-1; i++ )

          Mit dieser Schleife läßt du den letzten Eintrag im Array aus. Ist das Absicht?

          Wieso? Wenn ich 6 Einträge habe, muss ich von 0 .. 5 laufen, nicht bis 6.

          suchen = RegExp( feiertage[i][0] )+'g';
          alert ( suchen );

          Und was wird dir hier ausgegeben?

          / 1. Mai/g

          Du ignorierst die Fehlermeldungen?

          Wäre ja schön, wenn da was käme. Aber Opera schweigt. Allerdings auch zu
          var x = 3/0;

          Das müsste doch moniert werden?

          Kann es sein, dass ein mit Javascript veränderter HTML-Inhalt weiteren Javascript-Kommandos nicht zur Verfügung steht?

          Alle replaces klappen ja, solange sie die ursprünglichen Werte vorfinden. Der String " 1. Mai" (ein führendes Leerzeichen, um vom 11. 21. 31. abzusetzen) wird aber wohl nicht gefunden.

          Obwohl - dies hier wird genau einmal ausgeführt:
          .replace( feiertage[i][0], feiertage[i][1] )

          Okay, ich mach das jetzt also fünfmal hintereinander. Aber warum so umständlich?

          Kalle

          1. Warum machst du das nicht auf dem Server? Das dürfte einfacher gehen.

            Der Server gibt einen ganz normalen Veranstaltungskalender aus. Den mache ich Client-seitig zur Druckvorlage, recht komplizierte Reihenfolge für ein geheftetes Büchlein.

            Das beantwortet nicht meine Frage. Wieso willst du den HTML Code nachträglich ändern obwohl du die Information auf dem Server bereits hast?

            for ( i=0; i<feiertage.length-1; i++ )

            Mit dieser Schleife läßt du den letzten Eintrag im Array aus. Ist das Absicht?

            Wieso? Wenn ich 6 Einträge habe, muss ich von 0 .. 5 laufen, nicht bis 6.

            Ja, tust du aber nicht, da:
            length - 1 = 5  und i < 5 ist 4

            suchen = RegExp( feiertage[i][0] )+'g';
            alert ( suchen );

            Und was wird dir hier ausgegeben?
            / 1. Mai/g

            Ich hatte übersehen, dass du das 'g' ausserhalb des Konstruktors plazierst. So erzeugst du eine Zeichenkette keinen Regulären Ausdruck. Was du willst ist folgendes:
            var suchen = RegExp(feiertage[i][0], 'g');

            Du ignorierst die Fehlermeldungen?

            Wäre ja schön, wenn da was käme. Aber Opera schweigt.

            Du weißt auch wo du die Fehlermeldungen findest? Ich kann mir kaum  vorstellen, dass dir das hier nicht schon mal gesagt wurde. Die Fehlerkonsole ist das erste Hilfsmittel nach dem du suchen solltest, ansonsten weißt du ja nicht wenn du etwas falsch machst.

            Okay, ich mach das jetzt also fünfmal hintereinander. Aber warum so umständlich?

            Weil du den Ausdruck falsch zusammen baust.

            Struppi.

            1. RegExp(feiertage[i][0], 'g')

              Danke, so geht es. Habe das mit einem String verwexelt.

              length - 1 = 5  und i < 5 ist 4

              au ja, Denkfehler.

              Du weißt auch wo du die Fehlermeldungen findest?

              Naja bei Opera normal mit Extras - Weiteres - Fehlerkonsole.

              Aber da wird nichts gemeldet, wahrscheinlich habe ich die Opera verärgert und muss neu starten.

              Danke,
              Kalle

            2. Warum machst du das nicht auf dem Server? Das dürfte einfacher gehen.

              Das PHP-Programm stellt die Daten in einem programminternen array zusammen und übergibt an eine Routine, die sich eine HTM- Datei holt und Platzhalter füllt.

              Nun wird beim Druck eines Büchleins die Reihenfolge der Daten vollkommen durcheinandergewirbelt:

                1. Druckdurchlauf
              • erstes Blatt, 5 Nutzen:
                +------------+------------+
                | 29. Mai    |     2. Mai |
                | Termin 29a |  Termin 2a |
                | Termin 29b |  Termin 2b |
                |            |  Termin 2c |
                +------------+------------+
                ...
                +------------+------------+
                | 29. Mai    |     2. Mai |
                | Termin 29a |  Termin 2a |
                | Termin 29b |  Termin 2b |
                |            |  Termin 2c |
                +------------+------------+

              • zweites Blatt, 5 Nutzen:
                +------------+------------+
                | 27. Mai    |     4. Mai |
                | Termin 27a |  Termin 4a |
                | Termin 27b |  Termin 4b |
                |            |  Termin 4c |
                +------------+------------+
                ...
                +------------+------------+
                | 27. Mai    |     4. Mai |
                | Termin 27a |  Termin 4a |
                | Termin 27b |  Termin 4b |
                |            |  Termin 4c |
                +------------+------------+

              und nach 8 Blättern dann der 2. Druckdurchlauf für die Rückseiten.

              Keine Ahnung, wie ich dem SQL diese Reihenfolge beibringen soll ;-)

              Kalle

  2. Hi,

    Nun habe ich aber nicht gefunden, wie man replace() mit einer Variablen benutzen könnte, zumindest nicht  http://de.selfhtml.org/javascript/objekte/regexp.htm@title=hier.

    Dann benutze bitte mal die Suchfunktion des Forums - das Thema hatten wir schon oft.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]