获取URL中图像名称的第一个匹配项(regex、Ruby)

获取URL中图像名称的第一个匹配项(regex、Ruby),ruby,regex,Ruby,Regex,我试图在URL(ruby)中注册第一个匹配的图像名 以下是我当前的代码: @wikimedia_link.match(/(\/|:)([a-zA-Z\_\-0-9]*\.(jpeg|jpg|png|gif))/).try(:[], 2) 如果我有一个匹配项,即 http://en.wikipedia.org/wiki/File:Samuel_L_Jackson_Comic_Con.jpg 但是,这会返回一个错误(nil),这似乎是因为url中有“Lucy_desi_1957.JPG”和“22

我试图在URL(ruby)中注册第一个匹配的图像名

以下是我当前的代码:

@wikimedia_link.match(/(\/|:)([a-zA-Z\_\-0-9]*\.(jpeg|jpg|png|gif))/).try(:[], 2)
如果我有一个匹配项,即

http://en.wikipedia.org/wiki/File:Samuel_L_Jackson_Comic_Con.jpg
但是,这会返回一个错误(nil),这似乎是因为url中有“Lucy_desi_1957.JPG”和“220px-Lucy_desi_1957.JPG”

http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG/220px-Lucy_desi_1957.JPG
你知道第一场比赛怎么打吗


谢谢大家!

以下正则表达式适用于您的两个示例

/^.+\/[\w:]+\.(jpe?g|png|gif)/i
您可以只获得
”http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG“
具有以下功能

"http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG/220px-Lucy_desi_1957.JPG".match(/^.+\/[\w:]+\.(jpe?g|png|gif)/i).to_a.first
如果只是在文件名本身之后,请从正则表达式中删除
^.+\/
,保持简单

/[\w:]+\.(jpe?g|png|gif)/i
匹配中使用此版本将仅返回
“Lucy_desi_1957.JPG”


在任何一种情况下,如果没有找到匹配项,
nil
将返回。

如果希望文件名位于结尾,请添加一个$以匹配结尾

/(/|:)([\w-\.]+\.(jpeg|jpg|png|gif)$)/i
你想要的是:

@wikimedia_link[/[^\/:]+\.(?i:jpeg|jpg|png|gif)/]
使用
(?i:…)
分组切换到不区分大小写的匹配,因此jpg或jpg将被匹配。

我将这样做:

2.0.0-p247 :008 > image_url = 'http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG/220px-Lucy_desi_1957.JPG'
 => "http://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Lucy_desi_1957.JPG/220px-Lucy_desi_1957.JPG" 
2.0.0-p247 :009 > image_name = image_url.match( /[-_\w:]+\.(jpe?g|png|gif)$/i ) => #<MatchData "220px-Lucy_desi_1957.JPG" 1:"JPG"> 
2.0.0-p247 :012 > image_name.to_s
 => "220px-Lucy_desi_1957.JPG"
此解决方案是最好的,因为它从简单url和简单文件名派生图像的文件名:

http://www.anexample.com/dog.jpg
http://www.anexample.com/342432_large-xs_dog.jpg
或者使用更复杂的文件名:

http://www.anexample.com/dog.jpg
http://www.anexample.com/342432_large-xs_dog.jpg
或者,如果在URL中多次引用图像:

http://www.anexample.com/cat.jpg/upload/342432_large-xs_dog.jpg/xs/342432_large-xs_dog.jpg

尝试获取所有匹配项并仅使用第一个?我更改了您问题的标签;它与Ruby on Rails无关,只与Ruby有关。我想他希望文件名位于路径的末尾。谢谢,在前端添加了
^.+\/
。这不仅仅是文件名,而是返回整个url。我的正则表达式最初是
/[\w::][+\(jpe?g | png | gif)/I
(检查编辑历史记录),但正如@QuentinUK所建议的,看起来OP可能也希望把URL放在前面。不管怎样,看起来OP已经解决了问题。我已经更新了我的答案,以反映我的原始模式。我意识到这一点。不过,我不确定@QuentinUK是从哪里得到这个想法的;这似乎与OP想要的正好相反:)此外,(根据第一个示例输出),OP似乎只想要原始图像文件名,而不想要mediawiki在与image.Hmm相关的一些URL中添加的“File:”。不知道为什么会被否决,因为这是目前唯一一个实际返回海报要求的结果的答案:在给定URL中第一次出现类似图像的文件名。哦,好吧。