RegEx - "Optional Lookahead"

  • Allgemein

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    RegEx - "Optional Lookahead"

    Hi,

    ich versuche aktuell Owner und RepoName aus GitHub-URLs, die in NPM-Paketen vorkommen, auszulesen. Mein bisheriges RegEx ist .*github\.com[\/:](?<repo_owner>[^\/]+)[\/:](?<repo_name>[^/.:]+(?=\/|:|\.)?)\S*.
    Das funktioniert auch recht gut, wobei der optionale Lookahead vmtl. nicht 100%ig zielführend ist. Einziges Problem ist nun, dass auch im Repo-Namen bereits Punkte vorkommen können: https://www.github.com/test/foo.bar
    Nun könnte ich einfach auch Punkte als Character in der Matching Group erlauben, aber was mache ich dann mit sowas: https://www.github.com/test/foo.bar.git - Hier möchte ja das .git am Ende nicht haben.

    Meine Idee war nun .git als ganzes in den Lookahead zu integrieren, allerdings matcht [^/.:]+ halt schon alles, was geht. Lazy bringt da leider auch nichts, da ich ja nicht nur einen Character matchen will.
    Wie könnte ich also alles bis zum letzten .git matchen, wenn es da ist? An sich wäre das ja ein Positive Lookahead, aber das Problem ist eben, dass das .git ja optional sein kann und auch noch andere Sachen möglich sind.
    Die hinteren Non-Whitespace-Character sind einerseits für das .git als auch für sowas gedacht: https://www.github.com/test/foo/tree/v3

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Evtl. verstehe ich dein Problem falsch, aber würde sowas nicht das erwünschte Ergebnis bringen:

    Vor der Behandlung mit Regex prüfen ob die url eine „.git“ Endung hat. Falls ja, diese entfernen. Dann den Regex drüber laufen lassen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Gut, stimmt. Das wäre auch eine Idee. Dachte halt, wenn ich schon RegEx bediene, dass ich sowas nicht mehr brauche und es einen guten Weg gibt. :D

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: