2016-08-24 90 views
2

當使用path-to-regexp時,如何匹配所有不以/api/開頭的路徑?如何使用path-to-regexp匹配所有不以/ api /開頭的路徑?

通過使用原生JavaScript RegExp /^(?!\/api\/).*/將匹配/x/y/z。請參閱here的測試結果 enter image description here

但是,它不適用於path-to-regexp。看到there

enter image description here

那麼什麼是實現路徑對正則表達式我的目標的正確方法的測試結果?

[更新1]

更多細節: 真正的情況是,我使用angular2 + koajs。而在angular2中,瀏覽器可能會向服務器發出客戶端路由URL。請參閱我的another question關於此。

爲了解決這個問題,通過@mxii的建議,我試圖用koa-repath重定向,並非始於/api/到根網址的所有請求:http://localhost:3000/ excepte它的靜態資產(JS/JSON/HTML/PNG/...) 要求。

koa-repath使用path-to-regexp來匹配路徑。這就是我問這個問題的原因。

+0

快速路由測試器不是一個正則表達式測試器......你輸入一個類似'/ api/user /:name /:age /'的路由,然後像'/ api/user/john-doe/21'這樣的路徑給你鑰匙('1。名字和'2。路線')和結果('名字:john-doe'和'年齡:21')...「正則表達式」模塊將正則表達式排除在路由之外,因此您可以通過正則表達式檢查路徑字符串是否匹配它。我沒有得到你想要達到的目標,請你澄清一下。 –

+0

謝謝西蒙,請參閱我的更新瞭解更多詳情 – ricky

回答

1

請參閱我的評論以獲取關於快速路由測試程序如何工作的說明。

如果你只是想要一個簡單的正則表達式來檢查一個字符串不以api/api開始,你並不需要「路徑對正則表達式」對於這一點,你可以簡單地使用這個表達式:

/^(?!\/?api).+$/ 

說明:

^ => beginning of string 
(?!) => negative look-ahead 
\/? => 0 or 1 slash 
.+ => 1 or more character (any except newline) 
$ => end of string 

所以,你得到一個匹配,如果字符串的開頭後面沒有/api(可選斜線)。

查看http://regexr.com/3e3a6舉例。

編輯:如果您想用另一種方式圓(只匹配的網址開頭/apiapi,您可以使用正前瞻:

^(?=\/?api).+$ 

http://regexr.com/3e3a9

但它更簡單,那麼:

^\/?api.*$ 

http://regexr.com/3e3af

相關問題