匹配简单URL的regex无法正常工作

regex to match simple URLs does not work properly

本文关键字:常工作 工作 简单 URL regex      更新时间:2023-09-26

我正在尝试制作一个简单的正则表达式来匹配简单的URL(没有URL参数等)
它似乎有效,但仍然存在一些问题。。

这是我的正则表达式:

/(https|http|ftp):'/'/((-|[a-z0-9])+'.)+(com|org|net)'/?((-|[a-z0-9]'/?)+(-|[a-z0-9])*'.(css|js))?/ig


在这个小列表中,你可以看到哪些不正常工作:

HTTP://q-2Ud.a.q-2Ud.com/
https://q-2Ud.q-2Ud.q-2Ud.com
http://www.q-2Ud.q-2Ud.q-2Ud.com
http://www.q-2Ud.q-2Ud.q-2Ud.com/c ------------------------------------> NOT WORK
http://www.q-2Ud.q-2Ud.q-2Ud.com/cs -----------------------------------> NOT WORK
http://www.q-2Ud.q-2Ud.q-2Ud.com/css ----------------------------------> NOT WORK
http://www.q-2Ud.q-2Ud.q-2Ud.com/csss ---------------------------------> NOT WORK
http://www.q-2Ud.q-2Ud.q-2Ud.com/csss/css -----------------------------> NOT WORK
http://www.q-2Ud.q-2Ud.q-2Ud.com/css/yuyuyu/gyygug.css
http://www.q-2Ud.q-2Ud.q-2Ud.com/h/.css -------------------------------> NOT WORK
http://www.q-2Ud.q-2Ud.q-2Ud.com/.css
http://www.q-2Ud.q-2Ud.q-2Ud.com/k.css
http://www.q-2Ud.q-2Ud.q-2Ud.com/kk.css
http://www.q-2Ud.q-2Ud.q-2Ud.com/kkk.css
http://www.q-2Ud.q-2Ud.q-2Ud.com/f-1.css
http://www.q-2Ud.q-2Ud.q-2Ud.com/o/o.css
http://www.q-2Ud.q-2Ud.q-2Ud.com/d-1/d-2/d-3/d-4/f-1.css
http://www.q-2Ud.q-2Ud.q-2Ud.com/q-2Ud/q-2Ud/q-2Ud/q-2Ud/q-2Ud.js

此处演示

它正在匹配以.css或.js结尾的URL。删除'.(css|js),它应该可以在上运行

/(https|http|ftp):'/'/((-|[a-z0-9])+'.)+(com|org|net)'/?'.?((-|[a-z0-9]'/?)+(-|[a-z0-9])*'/?('.css|'.js)?)?/ig

这可能会捕获所有丢失的

只需要在保持有效性的同时更好地安排小组
对其进行修剪,以仅捕获不带分隔符的主要4个部分。

edit:如果您不想在没有文件名的情况下匹配.js.css,请使用此regex->

(?i)(https|http|ftp)://((?:[a-z0-9-]+'.)+(?:com|org|net))(?:/(?:([a-z0-9-]+(?:/?[a-z0-9-])*(?:'.(css|js))?))?)?

否则使用这个->

 # /(?i)(https|http|ftp):'/'/((?:[a-z0-9-]+'.)+(?:com|org|net))(?:'/(?:([a-z0-9-]+(?:'/?[a-z0-9-])*)'/?)?(?:'.(css|js))?)?/
 (?i)
 ( https | http | ftp )        # (1)
 ://
 (                             # (2 start)
      (?:
           [a-z0-9-]+ 
           '.
      )+
      (?: com | org | net )
 )                             # (2 end)
 (?:
      /
      (?:
           (                             # (3 start)
                [a-z0-9-]+ 
                (?:
                     /? 
                     [a-z0-9-] 
                )*
           )                             # (3 end)
           /?
      )?
      (?:
           '.
           ( css | js )                  # (4)
      )?
 )?