我想从网址中提取参数。我有以下路径模式:
pattern = "/foo/:foo_id/bar/:bar_id"
和示例网址:
url = "/foo/1/bar/2"
我想获取{foo_id:1,bar_id:2}。我试图将模式转换成这样的东西:
"\/foo\/(?<foo_id>.*)\/bar\/(?<bar_id>.*)"
当我想在网址中替换反斜杠时,我在第一步失败:
formatted = pattern.gsub("/", "\/")
您知道如何修复此gsub吗?也许您知道更好的解决方案。
编辑:这是普通的Ruby。我没有使用RoR。
就像我在上面说的,您只需要在Regexp文字中转义斜线,例如/foo\/bar/
。从字符串定义Regexp时,没有必要:与Regexp.new("foo/bar")
产生相同的Regexp /foo\/bar/
。
至于更大的问题,这是我要解决的方法,我想这几乎是您计划解决的方法:
PATTERN_PART_MATCH = /:(\w+)/
PATTERN_PART_REPLACE = '(?<\1>.+?)'
def pattern_to_regexp(pattern)
expr = Regexp.escape(pattern) # just in case
.gsub(PATTERN_PART_MATCH, PATTERN_PART_REPLACE)
Regexp.new(expr)
end
pattern = "/foo/:foo_id/bar/:bar_id"
expr = pattern_to_regexp(pattern)
# => /\/foo\/(?<foo_id>.+?)\/bar\/(?<bar_id>.+?)/
str = "/foo/1/bar/2"
expr.match(str)
# => #<MatchData "/foo/1/bar/2" foo_id:"1" bar_id:"2">
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句