2016-06-16 52 views
4

在快遞,我們可以定義一些端點與一些路徑:高速路由中`/:foo *`和`/:foo(。*)`有什麼區別?

app.get('/:foo*', function(req, res) { ... }); 

app.get('/:foo(.*)', function(req, res) { ... }); 

這兩個路徑非常相似,什麼是它們之間的區別?

+0

低水平的解釋是說,他們結束編譯成非常不同的正則表達式,第一個編譯成:'/ ^(?:\ /([:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' /(?= $))?$/i',第二個到'/^\/((*)(?:\/(?=$))?$/我' –

+0

看起來像一個[捕獲組]( http://www.regular-expressions.info/brackets.html)給我。 – Bergi

回答

1

*匹配前面的令牌的零個或多個

鑑於串/:foo/apple/banana/:foo/:1234

/:foo* matches: /:foo/apple/banana/:foo/:1234 
       ^^^^^    ^^^^^ 

(.*)被捕獲組將匹配前述字符全部爲0或更多。有問題的字符是一個外卡,這意味着,當我們看到/:foo我們將繼續匹配,直到我們到達串

鑑於串/hello/world/:foo/bar?id=123

/:foo(.*) matches /hello/world/:foo/bar?id=123 
           ^^^^^^^^^^^^^^^^ 
相關問題