如何更换最后的" /"在URL中使用短划线

时间:2016-06-10 19:07:26

标签: ruby sinatra

我在基于Sinatra的应用程序中有这个URL:

<li><a href="/blog/<%= blog.title.tr(' ', '-') %>/<%= blog.slug %>"
             method="get">Show</a></li>

当我点击它时,URL如下所示:

http://127.0.0.1:9292/blog/A-lovely-day/654790

我也想让最后一个/也成为-,所以它会是:

http://127.0.0.1:9292/blog/A-lovely-day-654790

如何在呈现URL后替换它?

5 个答案:

答案 0 :(得分:0)

您可以指定多个字符进行转换

blog.title.tr(" /", "-")

答案 1 :(得分:0)

r = /
    .*  # match any character zero or more times (greedily)
    \K  # forget all matches so far
    \/  # match a forward slash
    /x  # free-spacing regex definition mode

要使用替换字段返回新字符串:

blog.title.sub(r, '-')

在现有字符串中进行替换:

blog.title.sub!(r, '-')

可以使用捕获组代替\K

blog.title.sub(/(.*)\/(.*)/, '\1-\2')

在现有字符串中进行替换的另一种方法:

blog.title[blog.title.rindex('/')] = '-'

答案 2 :(得分:0)

鉴于你开始于:

original url generation with colors

斜杠不是标题的一部分,而只是红色的字符。将其替换为代码中的-

url generation with slash replace with dash

答案 3 :(得分:0)

以下是我的观点:

path

在控制器中生成URL,并仅在视图中输出变量。

使用内置工具总是好的。 URI在操作URL / URI时有帮助,并在必要时理解适当的编码。

此外,记住authViewController实际上是文件路径名很有用,因此有时File包对于操作/拆分/加入非常有用。这不是一个很好的例子,但它非常方便。

答案 4 :(得分:0)

'http://127.0.0.1:9292/blog/A-lovely-day/654790'.
  sub(/\/(?!.*\/)/,'-') # match a / that is not followed by another /
#=> "http://127.0.0.1:9292/blog/A-lovely-day-654790"