n0sleep: Reguläre Expressions..

Hallo zusammen!

ich dachte eigentlich, es müsste ziemlich einfach sein, doch da hab ich wohl was nicht gecheckt:
ich hab ein string (mystring) in folgendem format:
<wort1>seperator<wort2>seperator<wort3>seperator (csv stil)
also zb.
<name>;<nachname>;<jahr>;

ich möchte jetzt gern mit javascript und regexp so aufteilen, dass ich ein array habe, dass <name>, <nachname> und <jahr> als werte enthält. ich kann das aber nicht einfach mit der split( seperator ) teilen, da der seperator z.b. auch ein 'a' sein kann. deshalb hab ich das folgendermassen versucht:

var resultarray = mystring.match( /<.+>/g );
irgendwie funzt das so aber nicht, obwohl wenn man sich beispiel 7 unter http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm#zeichenketten ansieht, dass doch so funzen müsste. oder geht das nur für perl regexp und nicht für javascript regexp.

danke schonmal für die anwort + hilfe
greetz
n0sleep

  1. var resultarray = mystring.match( /<.+>/g );

    Das findet alle Zeichen vom 1. '<' bis zum letzten '>'.

    Entweder so:
    http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm#gierig_genuegsam

    oder du suchst bis ersten '<' und dann alle Zeichen, die nicht '>' sind ([^>]+)

    Struppi.

    1. oder du suchst bis ersten '<' und dann alle Zeichen, die nicht '>' sind ([^>]+)

      sorry, irgendwie versteh ich deine vorgeschlagene lösung nicht. nachdem ich das erste element so gefunden hab, wie soll ich dann die nächsten finden?

      könntest du mir mal den ausdruck aufschreiben (als ganzes). wäre dir wirklich dankbar.

      1. gruss n0sleep,

        oder du suchst bis ersten '<' und dann alle Zeichen, die nicht '>' sind ([^>]+)

        könntest du mir mal den ausdruck aufschreiben (als ganzes). wäre dir wirklich dankbar.

        Struppi meint: var regX = /<[^>]*>/g;

        auseinandergedroeselt bedeutet dies:

        suche(/) "<" und, wenn vorhanden(*), alle darauffolgenden
           zeichen([), die nicht(^) ">" sind(]), und beende die suche
           beim auftauchen des erstbesten ">" (/) - suche im gesamten
           string nach diesem muster(g);

        /<.*>/ hingegen ist gefundenes fressen, fuer die von natur
           aus "gierigen" regulaeren ausdruecke, denn ".*" ist fuer die
           soetwas wie ein freibrief, sich _jedes_zeichen_ einzuverleiben,
           solange dem suchmuster gerade noch so entsprochen werden kann;

        var myString = "<name01>; <name02 > ; <> ; <  >;< name05 > ;<name06  > la, le, lu";

        // http://selfhtml.teamone.de/javascript/objekte/regexp.htm
           var regX = /<[^>]*>/g; // nicht gierig fuer regulaere ausdruecke bis JavaScript 1.5;
        // var regX = /<.*?>/g;   // nicht gierig fuer regulaere ausdruecke ab JavaScript 1.5;
        // var regX = /<.*>/g;    // in jedem falle gierig;

        // http://selfhtml.teamone.de/javascript/objekte/string.htm#match
        // kann ein regulaerer ausdruck ueber "match" erfolgreich auf einen
        // string angewendet werden, ist das ergebnis ein array dessen
        // eintraege allesamt dem vorgegebenen suchmuster entsprechen;

        var arr = myString.match(regX);
           alert(arr);

        by(t)e by(t)e - peterS. - pseliger@gmx.net

        --
        sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
        1. Danke danke!

          habs gecheckt und funzt auch so :)

          klasse
          greetz
          n0sleep

  2. Okay, hat sich eigentlich erledigt. hab eine andere (billige) lösung gefunden. die geht natürlich nur für wörter mit begrentzer länge (hier mit max 11 leerzeichen dazwischen). da ich aber weiss, welche worte kommen können, gehts so.

    mach jetzt
    resultstring.match(/<....>|<.....>|<......>|<.......>|<........>|<.........>|<..........>|<...........>/g);

    wenn mir jetzt jemand noch sagen könnte, wie ich die angeben kann, wieviele zeichen zwischen den < > zeichen stehen dürfen (als regexp ausdruck), dann könnte ich die hässliche schreibweise verwerfen.

    danke dir auf jeden fall struppi!

    greetz