Marlon H: Strings aus Pfadangabe auslesen

Hallo,

ich möchte aus einer Pfadangabe bestimmte Strings auslesen. Der PFad sieht in etwa so aus:

http://xx.xx.xx.xx/seitex/images/banner/Meier_Teneriffa1_2005.jpg

Aus dieser Pfadangabe brauche ich nur die letzten drei Strings, also
(ohne die .jpg Endung)

  • 2005
  • Teneriffa
  • Meier

diese sollen in den Variablen Jahr, Ort und Name geseichert werden!

Wie programmiert man das am Besten?

Über eine Lösung würde ich mich riesig freuen!

MfG
Marlon

  1. Hi

    var verzeich = window.location.href;
    var letzt = verzeich.lastIndexOf(".");
    verzeich = verzeich.substring(0, letzt);

    damit wäre das jpg weg....

    var letzt = verzeich.lastIndexOf("_");
    verzeich = verzeich.substring(letzt);

    damit hättest du die 2005 (?)

    ...und so weiter...
    is jetzt theoretie - hab ich nicht getestet *g*
    vllt hilft dir der ansatz weiter ??

    gruss
    Pedda

    1. Danke für die schnelle Antwort!
      Ich teste das mal, bis später ;-)

      MfG

    2. Hallo Pedda,

      Hi

      var verzeich = window.location.href;
      var letzt = verzeich.lastIndexOf(".");
      verzeich = verzeich.substring(0, letzt);

      damit wäre das jpg weg....

      Und warum nicht gleich auch den Anfang entfernen mit lastIndexOf("/")?

      Dann bleibt das Bild übrig. Dieses kann nun mit [split("_"); zerlegt werden.

      Mit freundlichem Gruß
      Micha

      --
      [link:http://leagueeditor.derletztekick.com@title=LeagueEditor JavaScript](http://de.selfhtml.org/javascript/objekte/string.htm#split) || Spannung, Spaß und S...
      1. Hoi Micha,

        das Ergebnis ist doch das selbe !? *g*
        Von welcher Seite man den String zerlegt is doch egal !?

        Gruss
        Pedda

        1. Hallo Pedda,

          Von welcher Seite man den String zerlegt is doch egal !?

          So bekommt man in einem Zug das Bild, da man am Punkt und am Slash gleichzeitig trennt.

          Mit freundlichem Gruß
          Micha

          1. Hoi Micha,

            Argument guuuuuuut *g*

            Gruss
            Pedda

  2. Hallo,

    ich möchte aus einer Pfadangabe bestimmte Strings auslesen. Der PFad sieht in etwa so aus:

    "in etwa" ist natürlich sehr hilfreich, wenn man etwas programmieren soll. Ohne konkrete Angaben kommst du nicht weiter.

    http://xx.xx.xx.xx/seitex/images/banner/Meier_Teneriffa1_2005.jpg

    Was heißt hier also in etwa?
    Trenne die Zeichenkette zwischen dem letzten slash und dem Punkt an den Unterstrichen?
    Du hast mit Sicherheit schon bei selfhtml nach Strings gesucht und hast das gefunden:
    http://de.selfhtml.org/javascript/objekte/string.htm
    und mit der genaueren Beschreibung sollte es ein leichtes sein die passenden Funktionen zu finden.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Hallo Struppi,

      auch hier ein Danke für die schnelle Antwort.

      der Pfad sieht genau so aus:

      http://xx.xx.xx.xx/seitex/images/banner/Meier_Teneriffa1_2005.jpg

      Wie beschrieben benötige ich genau die letzten 3 Strings ohne das .jpg !

      1. auch hier ein Danke für die schnelle Antwort.

        Leider hast du meine Fragen nicht beantwortet.

        der Pfad sieht genau so aus:

        So sah er vorher auch schon aus, kannst du beschreiben was daran die Regeln sind?

        http://xx.xx.xx.xx/seitex/images/banner/Meier_Teneriffa1_2005.jpg

        Wie beschrieben benötige ich genau die letzten 3 Strings ohne das .jpg !

        Du benötigst die Teilabschnitte eines Strings. Wie gesagt dafür gibt es tolle String Funktionen, lastIndexOf(), substr() und split() sollten für dein Vorhaben reichen.

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. auch hier ein Danke für die schnelle Antwort.

          Leider hast du meine Fragen nicht beantwortet.

          der Pfad sieht genau so aus:

          So sah er vorher auch schon aus, kannst du beschreiben was daran die Regeln sind?

          Die Datei ist immer wie folgt aufgebaut:

          Name_Ort_Jahr.jpg

          Diese 3 Angaben möchte ich in jeweilige Strings schreiben!

          Also zu deiner Frage:
          "Trenne die Zeichenkette zwischen dem letzten slash und dem Punkt an den Unterstrichen?"

          Ja, Unterstriche raus und jede Angabe in einem neuen String speichern.

          Habe bereits eine Lösung gefunden, danke für deine Hilfe!

          MfG
          Marlon

          1. Ja, Unterstriche raus und jede Angabe in einem neuen String speichern.

            Habe bereits eine Lösung gefunden, danke für deine Hilfe!

            sehr gut, ich nehme an in etwa so was:

            var url = 'http://xx.xx.xx.xx/seitex/images/banner/Meier_Teneriffa1_2005.jpg';  
            alert( getInfo(url) );  
              
            function getInfo(str)  
            {  
            str.search(/.*\/(.*)\..*/g);  
            return RegExp.$1.split('_');  
            }
            

            Struppi.

            --
            Javascript ist toll (Perl auch!)
            1. Hallo Struppi.

              function getInfo(str)
              {
              […]
              return RegExp.$1.split('_');
              }[/code]

              Interessant, habe ich so noch nirgends gesehen.

              Einen schönen Donnerstag noch.

              Gruß, Mathias

              --
              ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
              debian/rules
              1. Hallo Struppi.

                function getInfo(str)
                {
                […]
                return RegExp.$1.split('_');
                }[/code]

                Interessant, habe ich so noch nirgends gesehen.

                http://de.selfhtml.org/javascript/objekte/regexp.htm#dollar_1_9 ;-)

                Struppi.

                --
                Javascript ist toll (Perl auch!)
                1. Hallo Struppi.

                  function getInfo(str)
                  {
                  […]
                  return RegExp.$1.split('_');
                  }[/code]

                  Interessant, habe ich so noch nirgends gesehen.

                  http://de.selfhtml.org/javascript/objekte/regexp.htm#dollar_1_9 ;-)

                  Noch interessanter, da ich dies nicht einmal in der JavaScript-Core-Reference finde.

                  Einen schönen Donnerstag noch.

                  Gruß, Mathias

                  --
                  ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
                  debian/rules
                  1. Hallo,

                    Noch interessanter, da ich dies nicht einmal in der JavaScript-Core-Reference finde.

                    http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:RegExp#Special_characters_in_regular_expressions

                    »(x)
                    Matches x and remembers the match. These are called capturing parentheses.
                    For example, /(foo)/ matches and remembers 'foo' in "foo bar." The matched substring can be recalled from the resulting array's elements [1], ..., [n] or from the predefined RegExp object's properties $1, ..., $9.«

                    Dazu auch:

                    »Seit der JavaScript-Version 1.5 gilt das Auslesen der Treffer geklammerten Ausdrücke über RegExp.$1, RegExp.$2 und so weiter als veraltet. In der Praxis steht allerdings nur bei der im Beispiel verwendeten Methode exec() eine Alternative zur Verfügung.«
                    http://de.selfhtml.org/javascript/objekte/regexp.htm#allgemeines

                    Sprich, hier würde man wohl exec() verwenden.

                    var result = /.*/(.*)..*/g.exec(str);
                    return result[1].split('_');

                    Mathias

                    1. Hallo molily.

                      Hallo,

                      Noch interessanter, da ich dies nicht einmal in der JavaScript-Core-Reference finde.

                      http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:RegExp#Special_characters_in_regular_expressions

                      »(x)
                      Matches x and remembers the match. These are called capturing parentheses.
                      For example, /(foo)/ matches and remembers 'foo' in "foo bar." The matched substring can be recalled from the resulting array's elements [1], ..., [n] or from the predefined RegExp object's properties $1, ..., $9.«

                      Ah gut, also doch.

                      »Seit der JavaScript-Version 1.5 gilt das Auslesen der Treffer geklammerten Ausdrücke über RegExp.$1, RegExp.$2 und so weiter als veraltet. In der Praxis steht allerdings nur bei der im Beispiel verwendeten Methode exec() eine Alternative zur Verfügung.«
                      http://de.selfhtml.org/javascript/objekte/regexp.htm#allgemeines

                      Sprich, hier würde man wohl exec() verwenden.

                      var result = /.*/(.*)..*/g.exec(str);
                      return result[1].split('_');

                      Ja, so bin ich es auch gewohnt.

                      Einen schönen Donnerstag noch.

                      Gruß, Mathias

                      --
                      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
                      debian/rules
                    2. Dazu auch:

                      »Seit der JavaScript-Version 1.5 gilt das Auslesen der Treffer geklammerten Ausdrücke über RegExp.$1, RegExp.$2 und so weiter als veraltet. In der Praxis steht allerdings nur bei der im Beispiel verwendeten Methode exec() eine Alternative zur Verfügung.«

                      Diese Art die Treffer zu benutzen ist z.b. in Perl üblich, wieso ist das in JS veraltet? Zumal nur so Teile eines Strings ersetzt werden können.

                      Struppi.

                      --
                      Javascript ist toll (Perl auch!)
                      1. Diese Art die Treffer zu benutzen ist z.b. in Perl üblich, wieso ist das in JS veraltet?

                        Wieso, ist mir immer noch nicht klar, aber hier steht's
                        http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Deprecated_Features

                        Da ich reguläre Ausdrücke mit Perl gelernt habe, ist das für mich ein nützliches und übliches Feature, warum das in JS als deprecated gekennzeichnet wird, ist mir ein Rätsel. Aber na gut

                        var url = 'http://xx.xx.xx.xx/seitex/images/banner/Meier_Teneriffa1_2005.jpg';  
                        alert( getInfo(url) );  
                        function getInfo(str)  
                        {  
                        var erg = /.*\/(.*)\..*/g(str);  
                        return erg[1].split('_');  
                        }  
                        
                        

                        Was mich noch an den Erläuterungen etwas irritiert, ist diese Aussage:

                        Über nach oben RegExp.$1 und folgende Eigenschaften können lediglich die Teiltreffer des letzten Vorkommens gelesen werden. exec() hat diese Einschränkung nicht.

                        http://de.selfhtml.org/javascript/objekte/regexp.htm#exec

                        Welche Einschränkung?
                        Gibt es einen Unterschied zwischen RegExp.$1...$9 und exec()[1]..[9]?

                        Struppi.

                        --
                        Javascript ist toll (Perl auch!)
                        1. Hallo Struppi.

                          Was mich noch an den Erläuterungen etwas irritiert, ist diese Aussage:

                          Über nach oben RegExp.$1 und folgende Eigenschaften können lediglich die Teiltreffer des letzten Vorkommens gelesen werden. exec() hat diese Einschränkung nicht.
                          http://de.selfhtml.org/javascript/objekte/regexp.htm#exec

                          Welche Einschränkung?
                          Gibt es einen Unterschied zwischen RegExp.$1...$9 und exec()[1]..[9]?

                          exec()[0]?

                          Einen schönen Freitag noch.

                          Gruß, Mathias

                          --
                          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
                          debian/rules
                          1. Welche Einschränkung?
                            Gibt es einen Unterschied zwischen RegExp.$1...$9 und exec()[1]..[9]?

                            exec()[0]?

                            Das ist doch der Treffer an sich, also der Rückgabewert des Test, oder?

                            Struppi.

                            --
                            Javascript ist toll (Perl auch!)
                            1. Hallo Struppi.

                              Welche Einschränkung?
                              Gibt es einen Unterschied zwischen RegExp.$1...$9 und exec()[1]..[9]?

                              exec()[0]?

                              Das ist doch der Treffer an sich, also der Rückgabewert des Test, oder?

                              Ja, genau. Zudem kann man per exec() auch auf mehr als 9 Suchtreffer zugreifen.

                              Einen schönen Freitag noch.

                              Gruß, Mathias

                              --
                              ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
                              debian/rules
                              1. Welche Einschränkung?
                                Gibt es einen Unterschied zwischen RegExp.$1...$9 und exec()[1]..[9]?

                                exec()[0]?

                                Das ist doch der Treffer an sich, also der Rückgabewert des Test, oder?

                                Ja, genau. Zudem kann man per exec() auch auf mehr als 9 Suchtreffer zugreifen.

                                Wie gesagt, ich kenn das nur so von Perl auch da ist beschränkt, aber man kann auch dort den Weg über ein Array gehen, es existiert also beides freidlich nebeneinander und letztlich ohne $1...$9 kannst du ja keine Teilausdrücke mit replace() ersetzen, oder?

                                Struppi.

                                --
                                Javascript ist toll (Perl auch!)
                                1. Hallo,

                                  letztlich ohne $1...$9 kannst du ja keine Teilausdrücke mit replace() ersetzen, oder?

                                  Klar, $1 bis $9 im zweiten replace()-Parameter sind auch nicht deprecated und haben mit dem Thema RegExp.$1...$9 versus exec() nichts zu tun.

                                  Mathias

                                  1. letztlich ohne $1...$9 kannst du ja keine Teilausdrücke mit replace() ersetzen, oder?

                                    Klar, $1 bis $9 im zweiten replace()-Parameter sind auch nicht deprecated und haben mit dem Thema RegExp.$1...$9 versus exec() nichts zu tun.

                                    Wie gesagt ich kenn das anders, aber wie macht man dann sowas:

                                    var url = 'http://xx.xx.xx.xx/seitex/images/banner/Meier_Teneriffa1_2005.jpg';  
                                    var neu = url.replace( /(.*\/)(.*)(\..*)/g, '$1replace$3');  
                                    alert('Ersetzt wurde: ' + RegExp.$2  
                                    + '\nDie Dateiendung lautete: ' + RegExp.$3);  
                                    
                                    

                                    Da muss man dann noch mal exec aufrufen?
                                    Meiner Meinung kein gutes Konzept.

                                    Struppi.

                                    --
                                    Javascript ist toll (Perl auch!)
                                    1. Da muss man dann noch mal exec aufrufen?

                                      Stimmt, das ist genau das was auch bei Selfhtml steht.

                                      Meiner Meinung kein gutes Konzept.

                                      Nach wie vor. Es wird eine Eigenschaft gestrichen, die durchaus ihre Berechtigung hat und sicher auch oft eingesetzt wird, ohne einen adäquaten Ersatz. Ich sehe gerade das betrifft auch die anderen Variabeln mit denen man Teiltreffer ermitteln konnte. Würde mich wirklich interessieren woher das kommt und vor allem warum?

                                      Struppi.

                                      --
                                      Javascript ist toll (Perl auch!)
                        2. Hallo,

                          Diese Art die Treffer zu benutzen ist z.b. in Perl üblich, wieso ist das in JS veraltet?

                          Wieso, ist mir immer noch nicht klar

                          exec() ist die ECMAScript-Methode, RegExp.$1 ist die veraltete Netscape-JavaScript-Lösung. Mit exec(9 existiert eine m.M.n. klarere Alternative. Ich führe eine Methode aus und bekomme ein Rückgabewert, anstatt dass irgendwo bei einem zentralen Objekt Eigenschaften angelegt werden.

                          Was mich noch an den Erläuterungen etwas irritiert, ist diese Aussage:

                          Über nach oben RegExp.$1 und folgende Eigenschaften können lediglich die Teiltreffer des letzten Vorkommens gelesen werden. exec() hat diese Einschränkung nicht.
                          http://de.selfhtml.org/javascript/objekte/regexp.htm#exec

                          Welche Einschränkung?

                          Ok, das ist blöd ausdrückt.

                          while (Ergebnis = Suche.exec(derSatz)) {
                            document.write("<li>" + Ergebnis[1] + "</li>");
                          }

                          Könnte man natürlich auch so schreiben:

                          while (Suche.exec(derSatz)) {
                            document.write("<li>" + RegExp.$1 + "</li>");
                          }

                          Gemeint war, dass man exec() zweimal ausführen kann und die beiden Ergebnisarrays parallel existieren können.

                          Mathias