Schmidt: regulärer Ausdruck

Ich grüße euch.

In Quelltexten befinden sich Verweise dieser form:

  
<a href="http://seite.de/irgend/etwas/item.php?id=b0c39984c83195b14a92fb39eb1c06c0">  

Als id-Wert wird immer ein Hexadezimalwert übertragen.

Ich möchte per Javascrit diesen Hexadezimalwert auslesen.
Die Funktion match() scheint mir die die bestgeeignetste zu sein.

Ich hab jedoch ein Problem den richtigen regulären Ausdruck zu formulieren.
So sieht mein reg.Ausruck momentan aus:

  
document.getElementsByTagName("a")[$i].href.match(/item\.php\?id=([0-1a-f]+)?/i);  

Das Problem:
Es wird nicht die komplette Hexadezimalzahl ausgegeben, nur ein oder zwei Zeichen davon.

1. Wie muss der reg. Ausruck geändert werden, damit ich die komplette Hexadezimalzahl ausgegeben bekomme? (Ich vermute, es ist ein einziges Zeichen hinzuzufügen, komme aber beim besten willen nicht darauf.)

2. Gibt es eine Charakterklasse für Hexadezimalwerte wie  [%hex%] welche ich anstelle von [0-1a-f] verwenden könnte?

Ich danke euch.
Schönen Gruß
Schmidt

  1. Hi,

    Die Funktion match() scheint mir die die bestgeeignetste zu sein.

    Sofern keine weiteren Parameter folgen, reichen bereits einfache Stringfunktionen.

    Ich hab jedoch ein Problem den richtigen regulären Ausdruck zu formulieren.
    So sieht mein reg.Ausruck momentan aus:

    document.getElementsByTagName("a")[$i].href.match(/item.php?id=([0-1a-f]+)?/i);

    
    >   
    > Das Problem:  
    > Es wird nicht die komplette Hexadezimalzahl ausgegeben, nur ein oder zwei Zeichen davon.  
    
    warum gibst Du das über das letzte "?" dann so vor - sprich beschränkst die "Gierigkeit" des Ausdrucks?  
      
    freundliche Grüße  
    Ingo
    
    -- 
    [[barrierefrei Ingo Webdesign](http://www.1ngo.de/web/) » [Suchmaschinenoptimierung](http://www.1ngo.de/web/seo.html) | [em?](http://www.1ngo.de/web/em.html) | [IE7 - Bugs](http://www.1ngo.de/web/ie7.html)]
    
    1. Hallo Ingo.

      Die Funktion match() scheint mir die die bestgeeignetste zu sein.
      Sofern keine weiteren Parameter folgen, reichen bereits einfache Stringfunktionen.

      Welche sind konkret gemeint?

      document.getElementsByTagName("a")[$i].href.match(/item.php?id=([0-1a-f]+)?/i);

      
      > >   
      > > Das Problem:  
      > > Es wird nicht die komplette Hexadezimalzahl ausgegeben, nur ein oder zwei Zeichen davon.  
      > warum gibst Du das über das letzte "?" dann so vor - sprich beschränkst die "Gierigkeit" des Ausdrucks?  
        
      Muss nicht da hin, stimmt. Sah es aber nicht als Ursache wegen dem + hinter [0-1a-f].  
        
      ~~~javascript
        
      match(/item\.php\?id=([0-1a-f]+)/i)  
      
      

      sowie

        
      match(/item\.php\?id=([0-1a-f])/i)  
      
      

      sowie

        
      match(/item\.php\?id=([0-1a-f])+/i)  
      
      

      Funktionieren jedoch auch nicht. Einzige Unterschiede sind in der Anzahl der Hex-Ergebnisse. Mal ein, mal zwei Zeichen.

      Noch eine Idee?

      1. Hi,

        Sah es aber nicht als Ursache wegen dem + hinter [0-1a-f].

        vielleicht solltest Du noch mal _vor_ das + hinter dem [0-1a-f] schauen.

        Noch eine Idee?

        Schau genau hin, und zwar nicht nur null bis ein Mal.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. Hallo Schmidt,

        nur ein kleiner Schreibfehler in der Zeichenklasse.

        falsch: [0-1a-f]
        richtig: [0-9a-f] bzw.[\da-f]

        Die Gruppierung liefert zwar kein falsches Ergebnis, ist aber überflüssig.

        statt: ([0-9a-f]+)?
        besser: [0-9a-f]+ oder [0-9a-f]*

        Gruß Uwe

        1. nur ein kleiner Schreibfehler in der Zeichenklasse.

          Danke Uwe und Cheatah!

          match(/item.php?id=([a-f0-9]+)/i)
          funktioniert jetzt tatsächlich.

          Sowas selbst zu finden ist wirklich schwer. Man übersieht es besonders gerne.

          Die Gruppierung liefert zwar kein falsches Ergebnis, ist aber überflüssig.

          statt: ([0-9a-f]+)?
          besser: [0-9a-f]+ oder [0-9a-f]*

          Die Gruppierung ist nicht überflüssig.
          Mein erklärtes Ziel ist "Ich möchte per Javascrit diesen Hexadezimalwert auslesen."
          Lasse ich die Gruppierung weg, kriege ich nicht nur den Hex-Wert zurück, sondern den ganzen Suchstring inklusive "item.php?id=". Ich möchte nur den HexString.

          • (1 oder mehr) ist auch besser als * (0 oder mehr), denn keinen HexString suche ich ja nicht.

          Ich danke euch allen!

          1. Hallo,

            Die Gruppierung ist nicht überflüssig.
            Mein erklärtes Ziel ist "Ich möchte per Javascrit diesen Hexadezimalwert auslesen."
            Lasse ich die Gruppierung weg, kriege ich nicht nur den Hex-Wert zurück, sondern den ganzen Suchstring inklusive "item.php?id=". Ich möchte nur den HexString.

            • (1 oder mehr) ist auch besser als * (0 oder mehr), denn keinen HexString suche ich ja nicht.

            da musst du jetzt aber aufpassen.

            Mit »([0-9a-f]+)?« triffst du auch "keinen HexString".

            Also »([0-9a-f]+)«

            Gruß Uwe

      3. Hi,

        Sofern keine weiteren Parameter folgen, reichen bereits einfache Stringfunktionen.
        Welche sind konkret gemeint?

        indexOf() und substr().

        freundliche Grüße
        Ingo

        1. Sofern keine weiteren Parameter folgen, reichen bereits einfache Stringfunktionen.
          Welche sind konkret gemeint?
          indexOf() und substr().

          Vor dem Hintergrund, dass ich den gefundenen HexString weiterverarbeiten möchte, ist match() praktischer.

          Danke.

          1. Hi,

            indexOf() und substr().

            Vor dem Hintergrund, dass ich den gefundenen HexString weiterverarbeiten möchte, ist match() praktischer.

            praktischer ja, aber auch schneller als:

            var e = document.getElementsByTagName("a")[$i].href;  
            var p = e.indexOf("item.php?id=");  
            var x = (p==-1) ? "" : e.substr(p+12);
            

            ?

            freundliche Grüße
            Ingo