liyoupeng_java
peerless
2013-03-05 18:45
浏览 1.1k

正则表达式匹配URL

请教一个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路径等,其他部分次要。
求大神解决!!!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • goodscript_cn
    goodscript_cn 2013-03-06 11:11
    已采纳

    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}匹配点后缀

    点赞 评论
  • xjward
    xjward 2013-03-06 10:31

    [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

    点赞 评论
  • goodscript_cn
    goodscript_cn 2013-03-06 11:30

    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]
    正确的答案

    点赞 评论
  • xjward
    xjward 2013-03-08 10:50

    [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

    点赞 评论

相关推荐