正则表达式匹配所有网址,不包括.css,.js recources

时间:2015-06-25 09:36:48

标签: regex url

我正在寻找一个正则表达式来排除我不喜欢的扩展程序中的网址。

例如,应排除以.css.js.font.png.jpg等结尾的资源。

但是,我可以将所有资源放到同一文件夹中,并尝试将URL排除到此文件夹,例如:

.*\/(?!content\/media)\/.*

但那不起作用!如何改进此正则表达式以符合我的标准?

e.g。

匹配

http://www.myapp.com/xyzOranotherContextRoot/rest/user/get/123?some=par#/other

不匹配

http://www.myapp.com/xyzOranotherContextRoot/content/media/css/main.css?7892843

2 个答案:

答案 0 :(得分:1)

正确的解决方案是:

^((?!\/content\/media\/).)*$

请参阅:https://regex101.com/r/bD0iD9/4

Regular expression to match a line that doesn't contain a word?

的灵魂

答案 1 :(得分:0)

两件事:

首先,?!否定前瞻不会从输入中删除任何字符。在尾部斜杠之前添加[^\/]+。现在它正试图匹配两个连续斜线。例如:

.*\/(?!content\/media)[^\/]+\/.*

编辑)其次,开头和结尾的.*匹配太多。尝试收紧,或向content\/media添加更多详细信息。按照目前的情况,content/media可以吞噬.*,并且永远不会对前瞻进行检查。

建议

  1. 使用您原来的想法 - 针对扩展程序进行测试:^.*\.(?!css|js|font|png|jpeg)[a-z0-9]+$(不区分大小写)。
  2. 不使用正则表达式来执行此操作,而是使用可以提取任何URL的正则表达式(例如,https?:\/\/\S\+,或许?)然后使用String.indexOf测试每个URL:{{1 }}