簡體   English   中英

正則表達式匹配與特定模式不匹配的路徑:Express Router

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM