添加正则表达式以忽略/ js / img和/ css

时间:2013-06-29 12:59:42

标签: javascript regex node.js url

我有这个正则表达式

// Look for /en/ or /en-US/ or /en_US/ on the URL
    var matches = req.url.match( /^\/([a-zA-Z]{2,3}([-_][a-zA-Z]{2})?)(\/|$)/ );

现在使用上述常规表达式会导致URL出现问题,例如:

http://mydomain.com/ css / bootstrap.css

http://mydomain.com/ js /的jquery.js

因为我的正则表达式是从A-Z或a-z中删除2-3个字符

我的问题是如何添加到此正则表达式中以不使用

删除任何内容

jsimgcssext

不影响原来的。

我对正则表达不是那么专业:(

3 个答案:

答案 0 :(得分:1)

否定先行?

var matches = req.url.match(/^\/(?!(js|css))([a-zA-Z]{2,3}([-_][a-zA-Z]{2})?)(\/|$)/ );

\ 后跟jscss

答案 1 :(得分:0)

首先,您还没有确定您要搜索的内容。 使用小写的公共语言代码定义数组(Common language codes) 这样你就会知道要寻找什么。

之后,将您的网址转换为小写,并将所有'_'替换为' - ',并使用indexOf()在结果字符串中搜索数组的每个成员。

答案 2 :(得分:0)

由于您说您正在使用正则表达式替换文本,因此我将其更改为替换函数。此外,您强制正则表达式匹配字符串的开头;我不知道它会如何匹配。无论如何,这是我的方法:

var result = req.url.replace(/\/([a-z]{2,3}([-_][a-z]{2})?)(?=\/|$)/i,
  function(s,t){
    switch(t){case"js":case"img":case"css":case"ext":return s;}
    return "";
  }
);