[英]Regex to match paths that don't match a specific pattern: Express Router
我想忽略我的快速服務器上的/ foo / *形式的所有路徑。 所以我想做
app.get('someRegexThatDoesntMatchFoo/*', routes.index)
我努力了
app.get('/^\(\(.*foo/.*\)\@!.\)*$', routes.index);
但這沒有工作 - 它沒有捕獲all-routes-besides-foo
並應用routes.index
而不是我得到一個CANNOT GET bar
任何/bar
請求
有什么建議么?
謝謝!
以下正則表達式將匹配除以/ foo /開頭的路徑之外的任何路徑
app.get(/^\/([^f][^o][^o]|.{1,2}|.{4,})\/.*$/, routes.index);
我假設這是一個標准的javascript正則表達式。
第一個答案是不正確的,這就是我再次發布的原因。
以下正則表達式將匹配除以/ foo /開頭的路徑之外的任何路徑
app.get(/^\/([^f]|f[^o]|fo[^o]|foo[^/]).*$/, routes.index);
隨着字符串大小的增加,此解決方案變得越來越復雜。
無論如何,在這里尋找一個正則表達式是不對的。
配置路由時,您始終要從更特殊的規則開始,並以最常規的方式完成。 像這樣你就不會遇到這樣的問題。
你首先要確定你的路線/foo/*
,之后,所有其他*
。
定義/foo/*
處理(或不處理)的路由,然后使用通配符處理其他所有內容。
app.get('/foo/*', function(req,res) {
//ignore or handle
});
app.get('*', routes.index);
負向前瞻性regexps工作(至少在現代):
app.get(/^(?!\/foo\/)/, routes.index);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.