2013-06-29 23 views
0

我有這樣的正則表達式中添加正則表達式來忽略/ JS/IMG和/ CSS

// 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

,因爲我的正則表達式是從AZ或az

剝去2-3個字符

我的問題是如何將我在這個正則表達式添加到不剝離與

jsimgcss什麼或ext

不影響原來的。

我不那麼專家對正則表達式:(

+0

您正在使用哪種語言/工具? – Anirudha

+0

我使用Javascript/node.js @Anirudh – Ali

+0

如果你寫了正確的正則表達式,像img,css和ext這樣的字符串不應該被捕獲 –

回答

1

負先行?

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

\其次jscss

+0

我是出於某種原因獲取此錯誤 500 TypeError:無法調用未定義的方法'replace' – Ali

+0

請注意,如果您使用的是匹配結果 - 數字已經移位了一點,因爲我添加了額外的「()」 – mishik

+0

yes !!!!你真棒我真的忘了,這是現在成爲第一組:D – Ali

0

首先,你還沒有定義什麼您正在尋找的是 定義一個帶有小寫公共語言代碼的數組(Common language codes) 這樣你就會知道要尋找什麼。

之後,將您的網址轉換爲小寫,並用' - '替換所有'_',然後使用indexOf()在結果字符串中搜索數組的每個成員。

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 ""; 
    } 
);