2015-05-08 96 views
0

我有這段代碼來測試靜態文件。JavaScript regext匹配以固定字符串開頭的網址

if (/\.(html|css|js|png|jpg|jpeg|gif|ico|xml|rss|txt|eot|svg|ttf|woff|woff2|cur)(\?((r|v|rel|rev)=[\-\.\w]*)?)?$/.test(req.url)) { 
    next(); 
} else { 
    proxy.web(req, res); 
} 

但是,我想將其更改爲支持以/ api /或/ auth /開頭的URL的調用。任何人都可以用正則表達式來幫助我嗎?

if (/*expression to test here */).test (req.url) { 
    proxy.web (req.res); 
} 
else { 
    next(); 
} 
+0

爲什麼它必須用正則表達式來完成?爲什麼不使用' &&'並檢查是否存在'/ api /'或'/ auth /'?例如:'if(regex_for_image &&!is_api &&!is_auth)' –

+0

不知道我理解您的評論。我認爲正則表達式很容易。你的評論中的is_api是指什麼? –

+1

你能提供一個'req.url'的樣本嗎?取決於它可能是'if(/^\/(api|auth)\//.test(req.url){'。 – chris85

回答

0

您提供的樣本正則表達式:

/\/(html|css|js|png|jpg|jpeg|gif|ico|xml|rss|txt|eot|svg|ttf|woff|woff2|cur)(\?((r|v|rel|rev)=[\-\.\w]*)?)?$/.test(req.url)) 

下列表達式匹配:

/html 
/html? 
/html?r=(characters of kind alphanumeric,-,.) 

而R可以用v,相對被替換,轉速 和HTML可以更換與任何提供的擴展。

爲了在此之前添加一個/ api,您需要使用「\」來跳過/ char,因爲在javascript正則表達式中,它表示在正則表達式的開始/結尾處。 因此,正則表達式將在開始處添加「\/api」。 爲了添加auth選項,你應該使用| (或)用相應的括號標記:「\ /(api | auth)」。 最終的正則表達式看起來像:

/\/(api|auth)\/(html|css|js|png|jpg|jpeg|gif|ico|xml|rss|txt|eot|svg|ttf|woff|woff2|cur)(\?((r|v|rel|rev)=[\-\.\w]*)?)?$/ 
1

這應該這樣做。

if (/^\/(api|auth)\//.test('/auths/login')) { 
    alert('Match'); 
} else { 
    alert("No Match"); 
} 

例:https://jsfiddle.net/moobv6u9/(目前顯示不準確的URL,脫下s並應工作

這需要字符串以/api//auth/,僅此而已啓動的|是「或」和如果你想不區分大小寫,那麼在正則表達式https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp中最後的/之後使用i標記/修飾符。

相關問題