2016-05-23 9 views
0

eine eine Reihe von Routen Ich habe Hinzufügen, der wie sein kann:eine Regex Constraint auf einer Rails-Strecke

possible routes: 
- mac-book-retina-17-pid234-234 
- hp-laptop-pid234-234 
- vaoe-x12-pid234-234 

und ich möchte alle zu einer Aktion mit den Einschränkungen in Ruby Routendatei anzupassen. So etwas wie

get 'products/:product_info', to: 'products#type', constraints: { product_info: /[a-z]+-a-z]+-a-z]+-pid\d+-\d+/ } 

Das Problem ist, dass die /[a-z]+-/ kann 1 Mal wiederholt erhalten, 2 mal und 3-mal, und es macht es schwer, einen konsistenten gemeinsamen Regex für alle Fälle zu erhalten. Der einzige Teil, der in allen Routen konstant ist, ist der letzte Teil: pid234-234, der sich auf die Produkt-ID und eine andere sub_id bezieht.

Ich denke an etwas wie: Finden Sie alle Saiten bis Sie jedes dieser Teil (pid), aber ich weiß nicht, wie das geht.

+0

So etwas wie [das] hilft (https://regex101.com/r/aQ2kO4/1)? –

+0

Sie können die Anzahl der Wiederholungen einer Gruppe als Bereich angeben, indem Sie geschweifte Klammern verwenden, z. '([a-z0-9] -) {1,4}'. –

Antwort

0

Ich glaube, ich es geschafft, eine mögliche Lösung hierfür zu finden:

(.*)pid\d+-\d+ 

diese Regex alle Saiten entsprechen, bis sie die pid-12-12 erreicht.

+0

ein Vorschlag von @Thomas ist auch richtig – rock321987

1

Ich würde sagen, ein guter Anfang ist dynamic-segments

get 'products/:product_info', to: 'products#type', constraints: { product_info: /[A-Z]\d{5}/ } 

Ich hoffe, dass diese

Happy Hacking