我需要匹配图像的URL是这样的:
http://site.com/site.com/files/images/img (5).jpg
像这样的东西正常工作:
.replace(/(http:\/\/([ \S]+\.(jpg|png|gif)))/ig, "<div style=\"background: url($1)\"></div>")
除非我有这样的事情:
http://site.com/site.com/files/audio/audiofile.mp3 http://site.com/site.com/files/images/img (5).jpg
如何只匹配的形象呢?
谢谢!
编辑:我是使用JavaScript。
正确的网址不能有空格他们,他们应该有%20
或加'+'
来代替。 如果您已经将它们与那些替代形式写那么你的匹配会容易得多。
假设图像将始终处于“图像”目录,尝试:
http://.*/images/(.*?).(jpe?g|gif|png)
如果您不能承担images目录:
http://.*/(.*?).(jpe?g|gif|png)
第1组和2应该有你想要的东西(文件名和扩展名)。
我测试了正则表达式在这里 ,并在这里 ,它似乎你想要做什么。
运用
http:\/\/.*\/(.*)\.(jpg|png|gif)
应该做的伎俩,如果你想要的是图像的名称。 第一组是文件名,第二组是文件扩展名。
你可以假设网址将被空格分隔或分隔的回报?
如,你可以假设这个输入?
site.com/images/images/lol (5).jpg
site.com/images/other/radio.mp3
site.com/images/images/copter (3).jpg
如果你将有你的分隔符为您的字符串返回的部分,事情变得棘手。 什么样卷的你在说什么吗? 你可以半手工做的一切,还是过程都实现自动化?
这将是一个方法:
^((\w+):)?\/\/((\w|\.)+(:\d+)?)[^:]+\.(jpe?g|gif|png)$
Mathing冒号。 (:)在这种情况下,它仅接受的协议和端口(可选)。
这不匹配:
http://site.com/site.com/files/audio/audiofile.mp3 http://site.com/site.com/files/images/img (5).jpg
这将匹配(在第二HTTP结肠://删除)
“/audiofile.mp3 HTTP /”将计为一个文件夹“/音频/”
http://site.com/site.com/files/audio/audiofile.mp3 http//site.com/site.com/files/images/img (5).jpg
这不是愚弄证明。 但是也有一些未在文件名中不允许其他字符(* |“<>)