1

我得到了这条路线:

get %r{/content.json/([\w]+)/([\w]+)/} do
  ...
end

它匹配“/content.json/123/abc”。但我想匹配任意数量的目录,比如“/content.json/123/456/abc/def”,然后给我这样的参数:

{"splat":[],"captures":["123","456","abc","def"]}

正则表达式需要如何编写?

4

2 回答 2

1

一种可能的方法是匹配单个组中的子目录,并将它们拆分到路由本身中:

get %r{/content.json/([\w\/]*)} do
  dirs = params[:captures][0].split("/");
  ...
end

有了请求/content.json/123/456/abc/defdirs就会包含数组["123", "456", "abc", "def"]

于 2013-04-08T19:13:15.350 回答
0

那是不可能的。单个正则表达式只能有固定数量的捕获(尽管其中一些最终可能会捕获nil)。如果你对深度设置了一个限制,比如四个,那么你可以这样做:

%r{/content.json(?:/([\w]+))?(?:/([\w]+))?(?:/([\w]+))?(?:/([\w]+))?}
于 2013-04-08T16:14:32.613 回答