2017-03-07 5 views
1

Ich bin neu hier und auch neu zu regulären Ausdrücken.Regex zu Teil der URL

Ich bin für eine regex Regel suchen ersten Teil der Zeichenfolge übereinstimmen wie:

  1. Start/a/preend/Ende
    • Start/a
  2. Start/a/xyz/preend/Ende
    • Start/a
  3. Start/a/b/preend/Ende
    • Start/a/b
  4. Start/a/b/xyz/preend/Ende
    • Start/a/b
  5. Start/a/b/c/preend/Ende
    • Start/a/b/c
  6. Start/a/b/c/xyz/preend/Ende
    • Start/a/b/c

start is static word, end is static word, xyz is static word which may or may not be there, preend is variable word, but it is always there before end, a,b,c are variable words

Ist eine solche Regex-Regel möglich? Ich konnte nur Version mit dem Wort "xyz" arbeiten oder die Version ohne das Wort "xyz" arbeiten, aber ich war nicht in der Lage, universelle Regel herauszufinden.

Ich begann damit: (.*)\/[^\/]*\/end$ dann mit (xyz)? experimentiert, aber haben keine universelle Regel gefunden.

Vielen Dank im Voraus für jede Hilfe und Hinweise.

+0

was genau möchten Sie als Ausgabe haben? Welche Sprache verwendest du? –

+0

@jarlik Die Ausgabe erfolgt in Aufzählungszeichen. Ich bin mir nicht sicher, welche Sprache hinter dem Regex-Eingabefeld steht, aber ich gehe davon aus, dass es auf JavaScript basiert. –

Antwort

1

Sie können einen nicht-gierigen Quantifizierer *? und eine Lookahead-Assertion (?=...) verwenden, um vorwärts zu testen. Auf diese Weise die nicht-gierigen Quantor ein Zeichen nach dem anderen, bis die Unter-Pattern in der Look-Ahead-nehmen erfolgreich:

^start/.*?(?=/xyz/|/[^/]*/end$) 

demo

(Je nach Muster delimiters falls vorhanden, können Sie die Schrägstriche entkommen müssen)

+0

Danke @casimir!Das hat den Job erledigt. –