2010-11-06 94 views
29

新的红宝石,我将如何得到像URL文件扩展名:如何从url获取文件扩展名?

http://www.example.com/asdf123.gif 

另外,我怎么会格式化该字符串,在C#中我会做:

string.format("http://www.example.com/{0}.{1}", filename, extension); 
+3

我强烈建议使用URI或Addressable/URI库。尽管您可以使用格式化将值直接注入到URL中,但这些库提供了很多很好的功能,可以将URL拆分为组件,重建它,并确保url的结构正确。 – 2010-11-06 15:51:13

回答

61

使用File.extname

File.extname("test.rb")   #=> ".rb" 
File.extname("a/b/d/test.rb") #=> ".rb" 
File.extname("test")   #=> "" 
File.extname(".profile")  #=> "" 

格式字符串

"http://www.example.com/%s.%s" % [filename, extension] 
+0

所以如果返回值是“”,我将如何检查在if语句中的那个?如果extesion ==“”? – Blankman 2010-11-06 15:26:58

+1

'if extension.empty?' – 2010-11-06 16:16:23

+5

它出现'File.extname'不会剥离查询字符串。所以如果你的网址是'http://www.example.com/download.mp3?hello = world',那么它会返回'.mp3?hello = world'。只是要记住。 – 2013-01-21 21:43:43

3
url = 'http://www.example.com/asdf123.gif' 
extension = url.split('.').last 

将为您获取URL的扩展名(以最简单的方式)。现在,对于输出格式:

printf "http://www.example.com/%s.%s", filename, extension 
+0

这两个解决方案都不处理查询参数,因此您可能需要添加URI.parse对于第二部分,“http://www.example.com/#{filename}.#{extension}”将会执行 – Zaki 2010-11-06 15:12:52

+2

并且更精美的是' url.split('。')。last'和'“http://www.example.com/%s.%s”%[文件名,扩展名]'。 – 2010-11-06 15:13:01

+1

如果URL是“http://www.example.com/dir”,该怎么办? – 2010-11-06 15:17:51

2

你可以使用Ruby的URI class这样得到的URI的片段(即文件的相对路径),并在一个点最后出现分裂它(这也将工作,如果URL中包含查询部分):

require 'uri' 
your_url = 'http://www.example.com/asdf123.gif' 
fragment = URI.split(your_url)[5] 

extension = fragment.match(/\.([\w+-]+)$/) 
+0

同样,为什么只要调用'string.split()',正则表达式是必需的? – 2010-11-06 15:13:30

+0

您在评论时删除了RegExp;) – AdrianoKF 2010-11-06 15:14:10

+0

用于像“http://www.example.com/asdf123.php?myparam=1234.435.24”之类的赌场。 – 2010-11-06 15:14:42

22

这对文件与查询字符串

file = 'http://recyclewearfashion.com/stylesheets/page_css/page_css_4f308c6b1c83bb62e600001d.css?1343074150' 
File.extname(URI.parse(file).path) # => '.css' 

也返回“”如果文件没有扩展

+0

但这将失败:“http://recyclewearfashion.com”,或者,至少,给出错误的答案 – Itzik984 2017-09-03 15:22:56

+0

@ Itzik984有一个无效协议(缺少HTTP(S)),所以是不是一个有效的URI – Orlando 2017-09-04 19:52:23

+1

这对于“http:// recyclewearfashion.com”也会失败:) – Itzik984 2017-09-05 08:09:13

0

我意识到这是一个古老的问题,但这里的使用Addressable另一次投票。您可以使用.extname方法,该方法即使对查询字符串也按需要工作:

Addressable::URI.parse('http://www.example.com/asdf123.gif').extname # => ".gif" 
Addressable::URI.parse('http://www.example.com/asdf123.gif?foo').extname # => ".gif"