首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要在Rails路由约束Regex中使用\Z,但得到一个错误

需要在Rails路由约束Regex中使用\Z,但得到一个错误
EN

Stack Overflow用户
提问于 2013-05-26 16:36:14
回答 5查看 667关注 0票数 1

我需要允许一个路径来匹配以下四种格式:

  • foo
  • foo.json
  • foo.bar
  • foo.bar.json

如果一个路由以".json“结尾,那么应该匹配前面的部分,因此这四个示例的唯一可能匹配是"foo”和"foo.bar“。

我想出了以下正则表达式:/.*?(?=\.json|\Z)/,但它不能工作,因为Rails不允许您在路由约束中使用\Z

在路由要求中不允许Regexp锚字符:/.*?(?=\.json|\Z)/

有什么方法可以绕过这个或另一个正则表达式吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-05-26 19:46:31

最后,我创建了两条不同的路径,一条在末尾有JSON,另一条没有,两者都使用不同的正则表达式。以前的路线是这样的。

代码语言:javascript
运行
复制
get ':foo', to: 'foo#bar', constraints: { foo: /.*?(?=\.json|\Z)/ }

现在看起来是这样:

代码语言:javascript
运行
复制
get ':foo.json', to: 'foo#bar', constraints: { foo: /.*?(?=\.json)/ }, format: :json
get ':foo',      to: 'foo#bar', constraints: { foo: /.*?/ }
票数 1
EN

Stack Overflow用户

发布于 2013-05-26 17:10:01

下面的regex将匹配整个字符串,并且只捕获所需的部分

代码语言:javascript
运行
复制
(.*?)(?:\.json)?$

http://regex101.com/r/sM6rD0

此正则表达式将只匹配并捕获所需的部分。

代码语言:javascript
运行
复制
^((?:.(?!\.json$))*(?:$|.))

http://rubular.com/r/SdtEDiWPRX

但是,第二个正则表达式太复杂了,我非常怀疑你是否需要你的匹配和捕获完全相同。但话说回来,我对rails不太了解:)

票数 1
EN

Stack Overflow用户

发布于 2013-05-26 18:54:10

您应该能够创建自己的对象来定义.matches吗?方法。这与@mrhobo的regex相结合应该是可行的。

http://guides.rubyonrails.org/routing.html#advanced-constraints

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16761353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档