tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Matthias Reitinger
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
382
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Wessy
    Wessy Wessy ist offline Mitglied Gold
    Registriert seit
    Oct 2004
    Ort
    Münster
    Beiträge
    137
    Hallo Community,
    ich brauch mal einen Tip für mein Problem. Schraube schon eine Weile an einer Funktion welche quasi das String-Pendant zu substring ist. Also nicht einen Teil eines Strings anhand von Positionen ermittelt sondern anhand von Strings!

    Quasi: Man gibt den Anfangs-/End-String an und was dazwischen ist wird als Resultat zurückgegeben. Das habe ich nun mit regulären Ausdrücken auch 'soweit' fertig, allerdings möchte ich nicht vom ersten Anfangs-String alles bis zum letzten End-String sondern bis zum ersten End-String. Zum besseren Verständnis hab ich mal den Code mit beigefügt.

    PS.: Es gibt zwar eine Lösung dass man erst die Positionen der Strings ermittelt und diese dann wiederum per substring verwertet, aber dann wieder alle Fälle wie...ist der End-String vor dem Anfangs-String...ist überhaupt ein Anfangs-String angegeben...ist überhaupt ein End-String angegeben....u.s.w. abzufragen würde den Code schon etwas 'aufblähen'. Vielleicht kann man ja mit einem einfachen Ansatz beim regulären Ausdruck dies schon erledigen


    PHP-Code:
        function substrBySearch(stringToSearch,returnFromString,returnToString){
            var 
    regularExp;
            if(
    typeof(stringToSearch)  !='string'){return false;}
            if(
    typeof(returnFromString)!='string'){returnFromString='';}
            if(
    typeof(returnToString)  !='string'){returnToString='';}
            
    regularExp=new RegExp(returnFromString+'(.*)'+returnToString,'i');
            
    stringToSearch=stringToSearch.match(regularExp);
            if(
    stringToSearch==false){return false;}
            if(
    stringToSearch[1]!=undefined && typeof(stringToSearch[1])=='string'){
                return 
    stringToSearch[1];
            }else{
                return 
    false;
            }
        }
        
    alert(substrBySearch('Hier mal ein paar Daten! Also Vorname Karl; und Nachname Koslowski;','Vorname',';')); 
    Gibt entsprechend Karl; und Nachname Koslowski und nicht nur Karl zurück!
     
    Die Kunst Steuern einzunehmen besteht darin, die Gans zu rupfen ohne dass sie schreit.
    Maximilen de Béthune, französischer Finanzminister (1560 - 1641)

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin Wessy,

    ich befürchte, es gibt in JS keine einfache Lösung dafür, du wirst wohl den umständlichen Weg gehen müssen
     

  3. #3
    Avatar von Wessy
    Wessy Wessy ist offline Mitglied Gold
    Registriert seit
    Oct 2004
    Ort
    Münster
    Beiträge
    137
    Hallo Sven, man schade. Mag immer kleine, kompakte Funktionen ohne Schnickschnack! Aber ein Kumpel hat mich grad noch auf eine....immer noch super Lösung gebracht. Einfach per Split mit Begrenzung auf eine Trennung den Anfang splitten (und den 2. Teil nehmen), dann den Rest splitten (und den 1. Teil nehmen). Das müsste funktionieren. Habs noch nicht ausprobieren können aber es sollte meine Lösung sein. Danke dir trotzdem!
     
    Die Kunst Steuern einzunehmen besteht darin, die Gans zu rupfen ohne dass sie schreit.
    Maximilen de Béthune, französischer Finanzminister (1560 - 1641)

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Ich wüsste nicht, dass man in JS bei split() die Anzahl der Trennungen bestimmen kann

    Das optimalste wäre halt, wenn du den Inhalt der gesuchten Zeichenkette etwas genauer spezifizieren könntest als .*
     

  5. #5
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo,

    mit einem faulen Quantor sollte das funktionieren:
    Code javascript:
    1
    
    regularExp=new RegExp(returnFromString+'(.*?)'+returnToString,'i');
    Du solltest allerdings zuvor noch returnFromString und returnToString von Regexp-Steuerzeichen befreien. (Beispiel: http://simonwillison.net/2006/Jan/20/escape/).

    Grüße, Matthias
    Sven Mintel bedankt sich. 
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  6. #6
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    Gibt es keine Lookaround-Insertions in JS-Regex?

    Code :
    1
    
    pattern=new RegExp("(?="+returnFromString+")(\w)+(?<="+returnToString+")","i");

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  7. #7
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Zitat Zitat von chmee Beitrag anzeigen
    Gibt es keine Lookaround-Insertions in JS-Regex?

    Code :
    1
    
    pattern=new RegExp("(?="+returnFromString+")(\w)+(?<="+returnToString+")","i");

    mfg chmee
    Nö, gibts net
     

  8. #8
    Avatar von Wessy
    Wessy Wessy ist offline Mitglied Gold
    Registriert seit
    Oct 2004
    Ort
    Münster
    Beiträge
    137
    Hallo alle beisammen,

    danke für eure Anregungen! Eins verstehe ich aber noch nicht:
    @Matthias: Wie genau funktioniert das mit dem 'Quantor' bzw. was ist der Unterschied zwischen mit und ohne?

    Ich hab grad nicht die Möglichkeit das zu probieren. Auch gibts in meiner SelfHTML-Doku unter regulären Ausdrücken absolut nix zu "?"...

    Wiki meint es gibt mehrere Quantoren, also z.B. Existenz-, Anzahl-, etc. Aber wie funktioniert dass in den Javascript-RegExp's?

    PS: Hatte mir schon eine 'escape'-Funktion geschrieben um auch nach Zeichen wie ( ) \ ^ $ * + . ? suchen zu können. Klappt auch! Aber Danke für den Hinweis...
    Geändert von Wessy (21.10.09 um 13:19 Uhr)
     
    Die Kunst Steuern einzunehmen besteht darin, die Gans zu rupfen ohne dass sie schreit.
    Maximilen de Béthune, französischer Finanzminister (1560 - 1641)

  9. #9
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von Wessy Beitrag anzeigen
    @Matthias: Wie genau funktioniert das mit dem 'Quantor' bzw. was ist der Unterschied zwischen mit und ohne?
    Ohne ? sind die Quantifizierer gierig, mit ? sind sie faul (lazy).
    Zitat Zitat von Wessy Beitrag anzeigen
    Ich hab grad nicht die Möglichkeit das zu probieren. Auch gibts in meiner SelfHTML-Doku unter regulären Ausdrücken absolut nix zu "?"...
    Javascript hat die reg. Ausdrücke von Perl übernommen (bis auf einige Ausnahmen), siehe http://de.selfhtml.org/perl/sprache/...erig_genuegsam

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 14.08.06, 18:37
  2. Regulärer Ausdruck für "nichts"
    Von TVE im Forum Hosting & Webserver
    Antworten: 6
    Letzter Beitrag: 16.02.05, 14:15
  3. Regulärer Ausdruck für "test ...... \n.\n"
    Von mansenpansen im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 14.12.04, 21:29
  4. Antworten: 1
    Letzter Beitrag: 23.11.04, 06:27
  5. "sed" und Regulärer Ausdruck
    Von the-cR im Forum Linux & Unix
    Antworten: 3
    Letzter Beitrag: 28.03.04, 19:19