正则expression式在Express.js路由器

我试图在Express中find一些关于正则expression式的文档,但Express API中的信息非常稀less。 我正在试图做一个正则expression式匹配objectID。 有关正则expression式的示例在Express文档中给出。

router.get(/^\/commits\/(\w+)(?:\.\.(\w+))?$/, function(req, res){ ... }); 

我已经尝试了以下在我的路由器,它似乎工作正常。

 client.get('/staff/:id([0-9a-fA-F]{24})', function(req, res) { ... }); 

但有一些分歧,我不明白…

  • 我的例子被包围在' ,API中的例子不是。 这是什么意思? 我的expression是一个string,而不是一个正则expression式?
  • 我不使用: /^?$/ 。 不太了解正则expression式我想这是一些锚点。 我需要这个吗?
  • 我不逃避\我的url/staff/:id的第一部分。 这是我应该做的吗?

此外,有没有人知道一个广泛的资源阅读正则expression式在Express路由器…或参数选项或任何它是我在上面做…

这是值得阅读的路由匹配的源代码,但这里是简短的forms。

  • 'abc'是一个JSstring; /abc/是一个JS正则expression式。 该string可以用来创build一个正则expression式,这正是你正在做的。 所以两者都是有效的。 要查看其差异,请尝试执行var re = /abc/var re = new RegExp('abc')
  • ^是起始锚,而$是结束锚。 ^abc将匹配“abc”,“abcde”而不是“zabcd”,因为它需要以“abc” 开头abc$将匹配“abc”,“zabc”而不是“abcd”,因为它需要以“abc”结尾。
  • 当你使用以/开头和以/结尾的实际RegExpexpression式时,如果你想在你的RegExp中使用斜杠,你需要转义它们,否则解释器将如何知道这是一个斜杠字符而不是RegExp的结尾? 如果你使用一个string,它知道它不是,所以你不需要逃跑。

最后,试试这个:

 "abc".match(/abc/); // works "abc".match('/abc/'); // fails because there are no slashes "/abc/".match('/abc/'); // works "/abc/".match(/abc/); // works because "abc" is in there 

当然,如果你愿意的话,你可以逃避斜线

 "/abc/".match('\/abc\/'); // works "abc".match('\/abc\/'); // fails