ExpressJS:字符串模式和正则表达式中?,+,*之间有什么区别?

时间:2015-06-19 22:39:53

标签: javascript regex node.js express

嗨,我是Express的新手,虽然我已经在互联网上搜索了字符串模式的完整解释但我还没找到。 path-to-regexp的文档似乎也没有帮助。

具体来说,我试图在文档中解释这个(IMO相当神秘)的评论:

  

字符?,+,*和()是其正则表达式副本的子集。

请参阅http://expressjs.com/guide/routing.html

这些字符在正则表达式和字符串模式之间的表现有何不同?有人会知道Express字符串中特殊字符的完整列表,并解释它们应该做什么吗?

干杯

2 个答案:

答案 0 :(得分:1)

从示例中看,+?的行为正如您在正则表达式中所期望的那样,*等同于正则表达式.*。对于字符串模式而言 - 实际的正则表达式就像你期望的那样。

答案 1 :(得分:0)

这意味着您不能使用“常规”正则表达式,但您可以在确定ExpressJS应用程序的路由时使用正则表达式的“子集”。

  

这些字符在正则表达式和字符串之间的表现有多么不同   模式?有谁知道一个完整的字符列表被认为   特殊的快速字符串,解释它们是什么   应该做什么?

被认为是特殊的字符是提到的那些字符?, +, *, and ()P,这意味着即使ExpressJS不完全支持正则表达式,这些字符的行为与它们的行为完全相同(如果它是正则表达式< /强>

Express路线文档已经为您提供了示例:

// 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才能用于Express路由。