2016-05-23 109 views
0

添加一个正则表达式约束我有许多途径可以是这样:在Rails的路线

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

,我想使用Ruby的路由文件的约束,以匹配所有以一个动作。像

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

问题的东西是,/[a-z]+-/可以得到重复1次,2次和3次,这使得它很难获得一致的共享正则表达式的所有案件。 在所有路线中唯一不变的部分是最后一部分:pid234-234它引用产品ID和另一个sub_id。

我在想这样的事情:找到所有的字符串,直到你的每个部分(pid),但我不知道该怎么做。

+0

喜欢的东西[这](https://regex101.com/r/aQ2kO4/1)? –

+0

您可以使用大括号来指定组的重复次数作为范围。 '([A-Z0-9] - ){1,4}'。 –

回答

0

我想我设法找到这个可能的解决办法:直到它到达pid-12-12

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

这个正则表达式匹配的所有字符串。

+0

由@Thomas建议也是正确的 – rock321987

1

我要说的一个良好的开端是dynamic-segments

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

我希望这有助于

快乐黑客