2015-06-19 77 views
0

嗨,我是Express的新手,儘管我已經在互聯網上搜索了字符串模式的完整說明,我還沒有找到。 path-to-regexp的文檔似乎也沒有幫助。ExpressJS:字符串模式和正則表達式中的?,+,*有什麼區別?

具體來說,我想在文件中解釋這種(IMO相當晦澀)備註:

字符,+,*和()是其正則表達式對應的子集?

http://expressjs.com/guide/routing.html

如何做不同的這些字符正則表達式和字符串模式之間的行爲?任何人都會知道Express字符串中被認爲特殊的字符的完整列表,並解釋了它們應該做什麼?

乾杯

+0

0或1,1或更多,0或更多 – dandavis

+0

儘管如此,「*」似乎不是嚴格的0或更多。它似乎是一個真正的通配符,就像'/.*/'。這些微妙的差異是我所追求的 –

+1

如果你使用它來得出結論,只要對[Express Route Tester](http://forbeslindesay.github.io/express-route-tester/)進行評論,我認爲它或者過時或者無法正常工作。我輸入了路由:'*'和路徑:'/ path/value',它們*應該*匹配,當我在真正的快速應用中測試它時也會這樣做,但是在結果中顯示它不匹配。 – laggingreflex

回答

0

這意味着你不能使用「常規」規則表達式,但在確定的ExpressJS應用的路線,你可以使用正則表達式的「子集」。

這些字符在正則表達式和字符串 模式之間有何不同?有誰會知道一個完整的字符列表,被視爲 Express字符串中的特殊字符,並解釋了它們應該做什麼 ?

字符視爲特別是被提及的是,這些的人,?, +, *, and()P,這意味着,即使ExpressJS好好嘗試一下完全支持正則表達式時,這些字符的行爲完全一樣,他們會表現,如果這是一個正則表達式

的快速路由文檔已經給你舉例:

// will match acd and abcd 
app.get('/ab?cd', function(req, res) { 
    res.send('ab?cd'); 
}); 

// will match abcd, abbcd, abbbcd, and so on 
app.get('/ab+cd', function(req, res) { 
    res.send('ab+cd'); 
}); 

// will match abcd, abxcd, abRABDOMcd, ab123cd, and so on 
app.get('/ab*cd', function(req, res) { 
    res.send('ab*cd'); 
}); 

// will match /abe and /abcde 
app.get('/ab(cd)?e', function(req, res) { 
res.send('ab(cd)?e'); 
}); 

如果這些例子並不足夠,並且要深究下去,我建議你學習正則表達式:REGEX, best way to learn it

我還建議使用Regex101學習時。您可以從上面的示例中測試正則表達式,它會在右上角向您解釋

例子:

Regex

再次提醒的是,從整個正則表達式的特殊字符,只有?, +, *, and()P將在快速路由工作。

1

從它看起來像+?表現爲你在正則表達式想到的例子,*等同於正則表達式.*。這是字符串模式 - 進一步下來的實際正則表達式的行爲與您預期的相同。

相關問題