params中的字符串操作[:something]

时间:2012-11-15 09:33:13

标签: ruby-on-rails ruby ruby-on-rails-3

params[:svn_path]正在返回这样的网址

http://svn.repos.mywebsite.com/testingtitle.documents

现在我只需要获取网址的最后一部分testingtitle

我们如何得到它?

提前致谢

7 个答案:

答案 0 :(得分:3)

您可以使用红宝石的Uri module

uri = URI.parse("http://svn.repos.mywebsite.com/testingtitle.documents")

path = uri.path #"/testingtitle.documents"
path_with_no_slash = path.gsub("/", "") #"testingtitle.documents"
array = path_with_no_slash.split(".") #["testingtitle", "documents"]
result = array[0] #"testingtitle"

答案 1 :(得分:2)

你应该使用正则表达式来获得你期望的结果。

Here is a good example

答案 2 :(得分:2)

您可以使用File.basename;例如

url = "http://svn.repos.mywebsite.com/testingtitle.documents"
ext = File.extname(url)
result = File.basename(url, ext)

basename的第二个参数负责删除文件扩展名。 result将保持预期的结果。

答案 3 :(得分:2)

使用正确的URI解析器 -

这将为您提供所述网址的最后一部分。

require 'uri'

url       = "http://svn.repos.mywebsite.com/testingtitle.documents"    
last_part = URI(url).path.split('/').last # => testingtitle.documents

但是,您提供的输出在最后一部分需要更多操作,即在.上分割

last_part.split('.').first # => testingtitle

简单的字符串操作 -

url = "http://svn.repos.mywebsite.com/testingtitle.documents"
url.split('/').last.split('.').first # => testingtitle 

答案 4 :(得分:1)

试试这个:

params[:svn_path].match(/.*\.com\/(.*)\..*$/)[1]

1.9.3p194 :009 > params[:svn_path].match(/.*\.com\/(.*)\..*$/)[1]
 => "testingtitle" 

答案 5 :(得分:1)

您可以使用URI来解析此网址:

url = URI.parse('http://svn.repos.mywebsite.com/testingtitle.documents')

将为您提供包含这些变量的对象:

url.instance_variables #> [ :@scheme, :@user, :@password, :@host, :@port, :@path, :@query, :@opaque, :@registry, :@fragment, :@parser ]

然后在path组件上使用简单的正则表达式,如下所示:

url.path.match(/\w+/) #> #<MatchData "testingtitle">

将匹配任何单词字符的第一次出现(不包括/或。)

答案 6 :(得分:1)

Regexp + groups

url = 'http://svn.repos.mywebsite.com/testingtitle.documents'
puts url.match(/com\/([a-z]+)/)[1]
#=> testingtitle