Regulärer Ausdruck für eine Funktion "substrBySearch"

Wessy

Erfahrenes Mitglied
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:
    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!
 
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!
 
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 .*
 
Gibt es keine Lookaround-Insertions in JS-Regex?

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

mfg chmee
 
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... :-)
 
Zuletzt bearbeitet:
Hi.
@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).
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/regexpr.htm#gierig_genuegsam

Gruß
 

Neue Beiträge

Zurück