请教一个javascript正则表达式匹配URL
URL格式如下:
http://11.12.13.14:9091/FileServer/fileupload?path=/aa/bb/cc/backup/log/test.log
rtsp://20.0.1.15/88888888/16/20121215/268435462/268435462.ts
协议也可能是:https | http | ftp | rtsp | igmp | file | rtspt | rtspu
1、主要是要匹配URL最后面的文件,URL最后的斜杠后面必须要有文件,不限制文件格式;
2、匹配前面的协议部分、支持IP路径等,其他部分次要。
求大神解决!!!
code="javascript"://((((25[0-5]|2[0-4]\d|1?\d?\d).){3}(25[0-5]|2[0-4]\d|1?\d?\d))|([0-9a-z_!~*'()-]*.?))([0-9a-z][0-9a-z-]{0,61})?[0-9a-z].([a-z]{2,6})(:[0-9]{1,4})?([a-zA-Z/?_=]*).\w{1,5}[/code]
(https|http|ftp|rtsp|igmp|file|rtspt|rtspu)匹配 协议部分
(((25[0-5]|2[0-4]\d|1?\d?\d).){3}(25[0-5]|2[0-4]\d|1?\d?\d))匹配IP地址部分
([0-9a-z_!~*'()-]*.?))([0-9a-z][0-9a-z-]{0,61})?[0-9a-z].([a-z]{2,6}) 匹配域名部分
(:[0-9]{1,4})?匹配端口号可要可不要
([a-zA-Z/?_=]*)匹配端口号位置到点号部分的内容
.\w{1,5}匹配点后缀
[code="js"]
var str="ftp://20.0.1.15/999aa/20121215/268435462/js_1.6.4.tar.gz";
var urlReg=new RegExp(/(?:http|ftp|rtsp):\/\/[^\/]+\/([^.]*)\/([^\/]+.[^\/.]+)$/);
var flag=!!str.match(urlReg);
alert(flag);
[/code]
经测试:
rtsp://20.0.1.15/88888888/16/20121215/268435462/268435462.log
http://20.0.1.15/a?path=/20121215/268435462/268435462.log
ftp://20.0.1.15/999aa/20121215/268435462/js_1.6.4.tar.gz
皆弹出true
code="js"://((((25[0-5]|2[0-4]\d|1?\d?\d).){3}(25[0-5]|2[0-4]\d|1?\d?\d))|(([0-9a-z_!~*'()-]*.?))([0-9a-z][0-9a-z-]{0,61})?[0-9a-z].([a-z]{2,6}))(:[0-9]{1,4})?([a-zA-Z0-9/?_=.]*.\w{1,5})[/code]
正确的答案
[code="js"]
var str="ftp://www.iteye.com/999aa.action/20121215/268435462/js_1.6.4.tar.gz";
var urlReg=new RegExp(/(?:http|ftp|rtsp|rtsp|igmp|file|rtspt|rtspu):\/\/[^\/]+(\/.*)?\/([^\/]+.[^\/.]+)$/);
str.match(urlReg); [/code]
在写表达式的时候 先看一下你的需求
[code="java"]
1、主要是要匹配URL最后面的文件,URL最后的斜杠后面必须要有文件,不限制文件格式;
2、匹配前面的协议部分、支持IP路径等,其他部分次要。
[/code]
只需要判断符合URL格式 ,最后以文件格式结束
1:基本忽略URL的前缀 (根据需求 前缀没有利用价值,
其实可以用[a-zA-Z0-9]+ 来表示,考虑到特殊的、自定义的前缀所以放弃了 :lol: )
2: 忽略域名+IP 端口 (还是没有 利用价值)
3: 可以包含.action | .do 等方法后缀
4: 文件判断的时候 能包含文件后缀存在多个点的情况 eg: jdk1.6_4.tar.gz