John: replace() - ein Suchkriterium, verschiedener Ersetzungswert

Hallo,
ich wollte mal fragen, wie ich folgendes hinbekomme:
ich habe einen Text - eine Liste vielmehr - und ich habe ein Array mit genausoviel Werten, wie die Liste Einträge hat.
Nun möchte ich die Einträge der Liste mit replace() und einem regulären Ausdruck herausfiltern und je nach Treffer Nummer mit dem Wert an entsprechender Stelle im Array ersetzen.
Hier mal ein Schema:

var a = ['0', '1', '2', '3']  
for (var i = 0, l = a.length; i < l; i++)  
  {  
  textDiv.innerHTML.replace(/[0-9]{5}/g, a[i]);  
  }  

Mit match() und dem Ausdruck bekomme ich alle Einträge mit alert() angezeigt. Wie kann ich nun jedem Treffer einen anderen Wert verpassen?

Grüße, John

  1. Hi,

    Mit match() und dem Ausdruck bekomme ich alle Einträge mit alert() angezeigt. Wie kann ich nun jedem Treffer einen anderen Wert verpassen?

    Indem du die Treffer an eine Callback-Funktion übergibst, und diese den passenden Ersatzwert heraussuchen und zurückgeben lässt.

    Weitere Erklärungen und ein Beispiel findest du hier: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter

    MfG ChrisB

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
    1. Hallo,

      Indem du die Treffer an eine Callback-Funktion übergibst, und diese den passenden Ersatzwert heraussuchen und zurückgeben lässt.

      Also, so ganz verstehe ich das nicht.

      var a = ['0', '1', '2', '3'];  
      for (var i = 0, l = a.length; i < l; i++)  
        {  
        textDiv.innerHTML.replace(/[0-9]{5}/g, function(){return x[i];});  
        }  
      
      

      Das funktioniert nicht. Sieht jemand den Fehler?

      Grüße, John

      1. Hi,

        var a = ['0', '1', '2', '3'];

        for (var i = 0, l = a.length; i < l; i++)
          {
          textDiv.innerHTML.replace(/[0-9]{5}/g, function(){return x[i];});
          }

        
        > Das funktioniert nicht. Sieht jemand den Fehler?  
          
        Sieht jemand, wo x herkommen soll?  
          
        MfG ChrisB  
          
        
        -- 
        Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
        
        1. Hallo,

          var a = ['0', '1', '2', '3'];

          for (var i = 0, l = a.length; i < l; i++)
            {
            textDiv.innerHTML.replace(/[0-9]{5}/g, function(){return x[i];});
            }

          
          > > Das funktioniert nicht. Sieht jemand den Fehler?  
          > Sieht jemand, wo x herkommen soll?  
          
          Verdammt.. Kleiner Tippfehler hier.  
            
          Habe ein wenig umgeschrieben - es will aber immer noch nicht klappen:  
          ~~~javascript
          var a = ['0', '1', '2', '3'];  
          var m = textDiv.innerHTML.match(/[0-9]{5}/g);  
          for (var i = 0, l = m.length; i < l; i++)  
            textDiv.innerHTML.replace(m[i], function(){return a[i];});  
          
          

          Ich bekomme die korrekte Anzahl der zu treffenden Einträgen mit m.length
          Ich bekomme den korrekten momentanen Wert m[i] in der Funktion mit alert(m[i])
          Ich bekomme den korrekten momentanen Wert von a[i] in der Funtion mit alert(a[i])
          Aber: es wird nichts ersetzt. Irgendwas läuft da nicht rund - aber was?

          Grüße, John

          1. Hi,

            Aber: es wird nichts ersetzt.

            Doch.

            Aber: Du machst nichts mit dem „Ersetzten“.

            String.replace ändert nicht das Original, sondern gibt das „Ersezte“ zurück.

            MfG ChrisB

            --
            Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
            1. Hallo,

              Aber: Du machst nichts mit dem „Ersetzten“.
              String.replace ändert nicht das Original, sondern gibt das „Ersezte“ zurück.

              Ai verdammt... Das habe ich also übersehen.
              Tja.. jetzt muss ich mir was neues überlegen.
              Aber vielen Dank für die Info. Habe mich gestern das erste Mal etwas intensiver mit regulären Ausdrücken beschäftigt. Dann wollte ich einen Text damit "zerlegen" und umformen. Da habe ich gleich an replace() gedacht.
              Grüße, John

              1. Hi,

                Aber: Du machst nichts mit dem „Ersetzten“.
                String.replace ändert nicht das Original, sondern gibt das „Ersezte“ zurück.
                Ai verdammt... Das habe ich also übersehen.
                Tja.. jetzt muss ich mir was neues überlegen.

                Nein, musst du nicht. Du musst nur das Original entsprechend überschreiben – mit dem Rückgabewert, den du von replace bekommst.

                MfG ChrisB

                --
                Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
                1. Hallo,

                  Du musst nur das Original entsprechend überschreiben – mit dem Rückgabewert, den du von replace bekommst.

                  Joo, habe ein wenig über das Problem nachgedacht und bin genau zu dieser Lösung gekommen. Einfach bei jedem Schleifendurchgang die Speichervariable überschreiben.
                  Bin nun fertig mit meinem Script :-)
                  Nochmal ein dickes Dankeschön für deine Tipps.

                  Grüße, John

  2. moin,

    ich habe einen Text - eine Liste vielmehr - und ich habe ein Array mit genausoviel Werten, wie die Liste Einträge hat.

    Mach doch gleich ein Objekt obj[key] = value;

    Nun möchte ich die Einträge der Liste mit replace() und einem regulären Ausdruck herausfiltern [..]

    Mit einer callback-Funktion, Beispiel hier, für die Vorschau werden die Attribute title und descr in das Template gesetzt.

    Schönen Sonntag!

    1. Hallo,

      Mach doch gleich ein Objekt
      obj[key] = value;

      Nun, es ist ein Text, der strukturiert ist wie eine Liste... Dieser Text ist sehr, sehr lang (nicht von mir geschrieben) und da bedarf es ein paar kleine Änderungen.

      Grüße, John