Marcus Schätzle: Zweites Vorkommen eines Zeichens ermitteln

Guten Tag!

Ich möchte das zweite Vorkommen eines Zeichens innerhalb eines Übergabestrings ermitteln.

Der Übergabestring, der Informationen enthält um ein Frameset dynamisch aufzubauen, hat bisher dieses Format:
?~Menüname(LinkesFrame)~Pfad(RechtesFrame)~Dateiname(RechtesFrame)~Framesettitel

Die einzelnen Elemente zerlege ich momentan so:

p = new Array();
   for (i=0; i<=3; i++) {
   parameters = parameters.substring(parameters.indexOf("~")+1, parameters.length);
   p[i] = parameters.substring(0, (i < 3) ? parameters.indexOf("~") : parameters.length);
   }

Klappt auch.
Nun würde es mich interessieren, ob es möglich wäre (vielleicht mit einem regulären Ausdruck oder einem einzeiligem Ausdruck) im String gleich das exakt zweite vorkommen einer Tilde zu ermitteln, dann könnte man die beiden Anweisungen zusammenfassen.

Vielleicht hat jemand eine Idee oder einen Link?
Die Frage ist eigentlich "so interessehalber", weil ich es vielleicht an einer anderen Stelle brauchen könnte.
Wenn gerade keiner etwas parat hat ist auch ok!

Schönen Dank!

Marcus

  1. Hi,

    Vielleicht hat jemand eine Idee oder einen Link?

    <../../tecl.htm#a14>

    Insbesondere im Hinblick darauf, daß die Methode auch einen zweiten Index erlaubt, der seinerseits natürlich gerne aus einem (verdammt ähnlichen) Methodenaufruf bestehen kann.

    Mehr verrate ich jetzt aber nicht ;-)

    Cheatah

    1. Hallo!

      Ich glaube ich habe Deine versteckte Andeutung verstanden!

      Vielen Dank!

      Marcus

      1. Hi Marcus,

        schön das DU es erraten hast!
        Wenn die Lösung funktioniert - postest Du sie dann?

        Dann führt nämlich auch eine spätere Archivsuche zum Erfolg.

        Grüße, Martin

        1. Hallo Martin,

          Nun denn...

          Ich denke in Cheatahs Antwort lag der "richtige Schlüssel" zu dem ganzen. Wie er schon gesagt hat, kann man innerhalb von indexOf() ein zweites indexOf() als weiteren Parameter einbinden. Dieses initialisiere ich dann mit einer Startposition, die hinter der der ersten Tilde liegt. Darauf bin ich dummerweise nicht gekommen.
          Ich habe es zwar so noch nicht umgesetzt, aber so sollte es funktionieren.

          Grüße

          Marcus

          1. ok, weil Martin mich drum gebeten hat (falls andere dasselbe Problem haben), hier jetzt meine Lösung mit dem abgeänderten Code:

            var posDivider = parameters.indexOf("~");
               for (i=0; i<=3; i++)
                 p[i] = parameters.substring(posDivider+1, (i < 3) ? posDivider = parameters.indexOf("~", posDivider+1) : parameters.length);

            1. Hi

              var posDivider = parameters.indexOf("~");
                 for (i=0; i<=3; i++)
                   p[i] = parameters.substring(posDivider+1, (i < 3) ? posDivider = parameters.indexOf("~", posDivider+1) : parameters.length);

              Vieleicht hab ich das nicht richtig verstanden, aber wäre nicht
              ......
              var test=parameters.split("~")
              ......

              einfacher.
              ERgebnis ist ein Array test.
              alert(test[1]) für das 2. Vorkommen, da ab 0 gezählt wird.

              MfG

              ptak

              1. Hallo,

                hm, Du hast "irgendwie recht".

                Die bisher erste Tilde muß dafür aus dem Parameteraufruf entfernt und zusätzlich das Fragezeichen aus dem String entfernt werden, aber dann ist's ok.

                Danke

                Marcus

  2. Hallo,

    villeicht kann Search() dir helfen.

    file:///D:/Programme/SelfHtml/tecl.htm#a19

    Sohail

  3. Moin!

    Vielleicht hat jemand eine Idee oder einen Link?

    indexOf() ist ok, aber <../../tecl.htm#a23> waere wohl angebrachter.

    So long