2017-04-08 1 views
0

Ich habe immer ich irgendwie harte Arbeit mit Regex. Ich versuche, einen regulären Ausdruck zu machen, die Routen übereinstimmt, wenn die Routenparameter gesetzt:Regex, um Route Parameter

Zum Beispiel:

  • /post/1 Streichhölzer /post/{id}
  • /post/5/entspricht nicht/post/{id}
  • /post/6/comments/4 Übereinstimmungen /post/{id}/comments/{comment}
  • /post/a-random-slug entspricht.210 oder /post/{slug}
  • /user Spiele /user, aber nicht /user/

Was ich zur Zeit tat, ist eine Regex erstellen für jede Strecke (was auch immer Sie den param nennen will) und dann gegen diese Route regex die aktuellen URI entsprechen .

Was ich zur Zeit habe, ist:

My regex

In diesem Beispiel ich versuche, einen regulären Ausdruck für den Weg zu machen: /post/{param1}/{param2}. Das heißt, es sollte /post/ dann ein Parameter und ein anderer Parameter, aber nichts nach diesem Parameter übereinstimmen.

Wie Sie sehen können: ^(\/post\b)(\/.{1,}\/)(.{1,}\b)$ entspricht /post/what-is-your-name/5, und wenn ich ein weiteres / hinzufügen passt es nicht mehr. Wenn Sie jedoch die Zeichen nach diesem Regex erneut hinzufügen, beginnt es wieder zu entsprechen.

Was bedeutet, dass:

  • /post/what-is-your-name/5/ entspricht nicht
  • /post/what-is-your-name/5/moretut Spiel

Hat jemand eine Idee, wie ich das erste Beispiel erreichen kann?

Ich bin bei weitem jemand, der eine Menge über Regexes weiß, wenn jemand eine bessere Möglichkeit sieht, URIs gegen Routen zu vergleichen, dann lass es mich wissen.

Antwort

1

hoffe, dies wird Ihnen helfen,

Regex: ^(?:\/post\b)(?:\/[\w]+){2}$

Regex demo

+0

Dies ist eine Art, was ich derzeit haben, feststellen, dass dieser Weg übereinstimmen sollte '/ Post/{param}/{param } 'und nichts mehr. Wenn du danach hinzufügst, stimmt es immer noch mit mir überein und dein Beispiel https://regex101.com/r/gh8Wug/2 –

+0

@MelvinKoopmans Kannst du eine Sache tun, nur deinen Beitrag mit weiteren Beispielen aktualisieren, die du abgleichen willst oder nicht –

+0

@ MelvinKoopmans In diesem https: // regex101.com/r/gh8Wug/2 kannst du erwähnen, welche du nicht abgleichen willst –