我有这个正则表达式
// 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个字符
我的问题是如何添加到此正则表达式中以不使用
删除任何内容 js
或img
或css
或ext
不影响原来的。
我对正则表达不是那么专业:(
答案 0 :(得分:1)
否定先行?
var matches = req.url.match(/^\/(?!(js|css))([a-zA-Z]{2,3}([-_][a-zA-Z]{2})?)(\/|$)/ );
\
不后跟js
或css
答案 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 "";
}
);