如何用 URL 中的破折号替换最后一个“/”
How to replace the last "/" with a dash in a URL
我在基于 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 渲染后替换它?
您可以指定多个字符进行变换
blog.title.tr(" /", "-")
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
要return一个新字符串替换为:
blog.title.sub(r, '-')
要在现有字符串中进行替换:
blog.title.sub!(r, '-')
可以使用捕获组代替 \K
:
blog.title.sub(/(.*)\/(.*)/, '-')
在现有字符串中进行替换的另一种方法:
blog.title[blog.title.rindex('/')] = '-'
鉴于您开始于:
斜杠不是标题的一部分,只是红色字符。将代码中的-
替换为:
以下是我的处理方式:
require 'uri'
title = 'A lovely day'
slug = '654790'
uri = URI.parse('http://127.0.0.1:9292/blog/')
[*title.split, slug].join('-') # => "A-lovely-day-654790"
uri.path += [*title.split, slug].join('-')
uri.to_s # => "http://127.0.0.1:9292/blog/A-lovely-day-654790"
在控制器中生成URL,只在视图中输出变量
使用内置工具总是好的。 URI 在操作 URLs/URIs 时有帮助,并在必要时理解适当的编码。
此外,请记住 path
实际上是一个文件路径名,因此有时文件包对 manipulating/splitting/joining 非常有用。这不是一个很好的例子,但它派上用场了。
'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"
我在基于 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 渲染后替换它?
您可以指定多个字符进行变换
blog.title.tr(" /", "-")
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
要return一个新字符串替换为:
blog.title.sub(r, '-')
要在现有字符串中进行替换:
blog.title.sub!(r, '-')
可以使用捕获组代替 \K
:
blog.title.sub(/(.*)\/(.*)/, '-')
在现有字符串中进行替换的另一种方法:
blog.title[blog.title.rindex('/')] = '-'
鉴于您开始于:
斜杠不是标题的一部分,只是红色字符。将代码中的-
替换为:
以下是我的处理方式:
require 'uri'
title = 'A lovely day'
slug = '654790'
uri = URI.parse('http://127.0.0.1:9292/blog/')
[*title.split, slug].join('-') # => "A-lovely-day-654790"
uri.path += [*title.split, slug].join('-')
uri.to_s # => "http://127.0.0.1:9292/blog/A-lovely-day-654790"
在控制器中生成URL,只在视图中输出变量
使用内置工具总是好的。 URI 在操作 URLs/URIs 时有帮助,并在必要时理解适当的编码。
此外,请记住 path
实际上是一个文件路径名,因此有时文件包对 manipulating/splitting/joining 非常有用。这不是一个很好的例子,但它派上用场了。
'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"