waschbaersiegen: match() Bekomme den richtigen Ausdruck nicht hin

Reguläre Ausdrücke werde ich wohl niemals ganz verstehen :-(

Ich habe HTML-Quellcode in einem String vorliegen.

<a href="URL"><img src="URL" alt="Vorname Nachname" title="Vorname Nachname" border="0"></a>  

Ein ganz einfacher Link hinter einer Grafik. Im alt und title-Attribut ist der Vor und Nachname dieser Person. Ich möchte nur den Vornamen haben. Klappt auch gut bisher, wenn die Person "Klaus Meier" heißt. Auch "Hans Jürgen Meier" also mit 2. Vornamen klappt.

  
if ( treffer != null ) {  
    var treffer = quellcode_orginal.match(/alt=\"([A-Za-z0-9]){1,}\b/g);  
    for( i=0; i < treffer.length; i++ ) {			  
        vorname_a.push(treffer[i].substr(5));  
    }  
    alert(vorname_a);  
}  

Aber jetzt gibt es so Spaßvögel die noch Gott weiß was für Sonderzeichen in den Namen einbauen. Mal ein paar Beispiele:

  • Sandra -
    ~*~Hans~*~
    ´´´Markus´´´
    Alles nur keine Buchstaben ;-)

Wie kriege ich das in den Griff? Ich verstehe das einfach nicht komplett mit den regulären Ausdrücken. Das will nicht in meinen Kopf rein!

LG
Markus

  1. Aber jetzt gibt es so Spaßvögel die noch Gott weiß was für Sonderzeichen in den Namen einbauen. Mal ein paar Beispiele:

    • Sandra -
      ~*~Hans~*~
      ´´´Markus´´´
      Alles nur keine Buchstaben ;-)

    Tja, die verwenden halt, was du ihnen erlaubt hast. Und damit hast du umzugehen.

    Wie kriege ich das in den Griff? Ich verstehe das einfach nicht komplett mit den regulären Ausdrücken. Das will nicht in meinen Kopf rein!

    Keep it simpel stupid.

    /alt="\s*([\S]+)/

    Auf Deutsch. der erste Junk von non-whitespace hat die Rolle eines Vornamens oder sonstigen Spassvogel-Präfixes.
    Trägt auch Sorge dass anführender Whitespace übergangen wird.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Tja, die verwenden halt, was du ihnen erlaubt hast. Und damit hast du umzugehen.

      Nein - hab vergessen zu erwähnen das es ein Greasmonkey Script ist. Auf die Daten der Seite kann ich nicht zugreifen. Also kann ich auch nicht steuern was da so als Name eingetragen wird.

      Werde ich mal versuchen. Danke aber schon mal dafür ;-)

    2. Es geht in die richtige Richtung.
      Habe jetzt /alt="\s*([\S]+)/g weil ich in dem Quelltext mehr als einen Namen finden muss.
      Auf das Problem bin ich gestoßen weil es einen gab der den Namen so angegeben hat:
      <a href="URL"><img src="URL" alt="- Foobar - Foobaz" title="- Foobar - Foobaz" border="0"></a>
      Momentan finde ich von seinem Vornamen aber nur das "-".
      Muss/kann/sollte nicht noch ein \b mit rein um Anfang und Ende des Wortes abgenzen zu können? Und ein brfauchbarer Name auch wenn er so "verschnörkelt" ist mit Tilde usw, sollte ja immer noch nur aus Buchstaben bestehen.
      Hab da jetzt ein wenig erfolglos experimentiert.
      Wort abgrenzen und auf Buchstaben reduzieren.

      Aber immerhin bin ich jetzt bzgl \s* [\S+] mal schlauer ;-) Ist ja schon mal was.

      1. Mahlzeit waschbaersiegen,

        Auf das Problem bin ich gestoßen weil es einen gab der den Namen so angegeben hat:
        <a href="URL"><img src="URL" alt="- Foobar - Foobaz" title="- Foobar - Foobaz" border="0"></a>
        Momentan finde ich von seinem Vornamen aber nur das "-".

        Dann nimm einfach alles, was zwischen 'alt="' und dem letzten enthaltenen Leerzeichen steht. Das sind dann zwar ggf. mehrere Vornamen, aber wenn der Nachname *IMMER* das letzte Wort ist, müsste es hinhauen. Wenn. Großes WENN.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Ein ganz einfacher Link hinter einer Grafik. Im alt und title-Attribut ist der Vor und Nachname dieser Person. Ich möchte nur den Vornamen haben. Klappt auch gut bisher, wenn die Person "Klaus Meier" heißt. Auch "Hans Jürgen Meier" also mit 2. Vornamen klappt.

    Du möchtest alles was nach alt=" kommt und kein Anführungszeichen ist. Das ist einfach:

    var str = '<a href="URL"><img src="URL" alt="- Foobar - Foobaz" title="- Foobar - Foobaz" border="0"></a>';  
      
    str.match(/alt="([^"]*)/g)  
    alert(RegExp.$1);  
    
    

    Struppi.

    1. Du möchtest alles was nach alt=" kommt und kein Anführungszeichen ist. Das ist einfach:

      Nein - ich möchte nur den Vornamen haben. Der packt mir Vorname und Nachname. Aber ließ nochmal mein erstes Posting bzgl der Sonderzeichen die sich da teilweise in den Namen vestecken. Die bekomme ich nicht gematcht. Die Namen lauten zum Beispiel
      "- foobar - foobaz"
      "~sandra~ marie weißnichtmehr"

      Sonderzeichen, Freichzeichen dazwischen oder aber auch nicht. Ziemliches wirrwar ich weiß ;-)

      Mich würde jetzt aber auch mal interessieren was das (/alt="([^"]*)/g) auf gut deutsch bedeutet?
      Nutz ja nix das ihr mir etwas vor die Füße werft und ich es nicht verstehe.

      1. Du möchtest alles was nach alt=" kommt und kein Anführungszeichen ist. Das ist einfach:

        Nein - ich möchte nur den Vornamen haben.

        Also bis zum ersten Leerzeichen.

        Mich würde jetzt aber auch mal interessieren was das (/alt="([^"]*)/g) auf gut deutsch bedeutet?

        Suche alt=", dann alle Zeichen ausser Anführungszeichen, das wird geklammert und das Ergebnis steht in RegExp.$1

        Nutz ja nix das ihr mir etwas vor die Füße werft und ich es nicht verstehe.

        Vieles steht in selfhtml http://de.selfhtml.org/javascript/objekte/regexp.htm

        Struppi.

        1. Also bis zum ersten Leerzeichen.

          Genau! Bis zum ersten Leerzeichen. Und das hier funktioniert soweit erstmal ganz gut
          (/alt="([^"]*\s)/g)

          Suche alt=", dann alle Zeichen ausser Anführungszeichen, das wird geklammert und das Ergebnis steht in RegExp.$1

          Jetzt suche ich bis zum ersten Leerzeichen. Da wo das Wort aufhört. Warum greift dann aber \b nicht?

          Vieles steht in selfhtml http://de.selfhtml.org/javascript/objekte/regexp.htm

          Hey ;-) Mit das erste was ich probiert habe war /(\w.+)\s(\w.+)/ Eben genau die Seite. Ich hab mir angewöhnt wenn ich die Krake benutze "Selfhtml suchbegriff" zu nehmen.
          Bei anderen Problemen finde ich meistens die Lösung im Netz. aber bei regulären ausdrücken scheitere ich regelmäßig! Das will nicht in meinen kopf rein.
          bin zu alt ;-)
          Danke für die Hilfe!

          1. [latex]Mae  govannen![/latex]

            Ich hab mir angewöhnt wenn ich die Krake benutze "Selfhtml suchbegriff" zu nehmen.

            Warum?

            Cü,

            Kai

            --
            Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
            in Richtung "Mess up the Web".(suit)
            SelfHTML-Forum-Stylesheet
          2. Genau! Bis zum ersten Leerzeichen. Und das hier funktioniert soweit erstmal ganz gut
            (/alt="([^"]*\s)/g)

            Das sucht aber nicht bis zum ersten Leerzeichen.

            Das müßte ausreichen: /alt="([^ ])/g

            Suche alt=", dann alle Zeichen ausser Anführungszeichen, das wird geklammert und das Ergebnis steht in RegExp.$1

            Jetzt suche ich bis zum ersten Leerzeichen. Da wo das Wort aufhört. Warum greift dann aber \b nicht?

            Weil die Wortgrenze auch bei einem Sonderzeichen liegt.

            Struppi.