2014-12-03 158 views
1

我想在Express中找到一些关于正则表达式的文档,但Express API中的信息非常稀疏。我试图做一个正则表达式匹配objectID。有关正则表达式的示例在Express文档中给出。在Express.js路由器正则表达式

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

我试图在我的路由器下面,它似乎做工精细。

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

但也有我想不通有些差异...

  • 我的例子在'包围,在API中的例子中是没有的。 是什么意思?我的表达是一个字符串而不是正则表达式?我不使用:/^?$/。不太了解 正则表达式我想这是某种锚。我需要这个吗?
  • 我没有逃脱\我的网址的第一部分/staff/:id。这是我应该做的 ?

而且,没有人知道一个广泛资源用于读取正则表达式的快速路由器...或参数选项或不管它是我在做上述...

+0

请删除复选标记,因为我认为我的答案是错误的字符串部分。似乎express.js在传入字符串时有不同的处理方式。 – nhahtdh 2014-12-03 11:17:20

+0

是的,我也意识到了这一点。你仍然给了我很多有关正则表达式部分的好消息=) – 2014-12-03 11:23:29

+0

':id'部分需要用'param'定义 – nhahtdh 2014-12-03 11:29:38

回答

1

值得一读路由匹配的源代码,但这里是简短的形式。

  • 'abc'是一个JS字符串; /abc/是一个JS正则表达式。字符串可以用来创建一个正则表达式,这正是你正在做的。所以两者都是有效的。要看到区别,请尝试var re = /abc/var re = new RegExp('abc')
  • ^是一个起始锚点,而$是一个结束锚点。 ^abc将匹配“abc”,“abcde”而不是“zabcd”,因为它需要开始与“abc”。 abc$将匹配“abc”,“zabc”但不匹配“abcd”,因为它需要以“abc”结尾。
  • 当您使用实际的RegExp表达式,以/开头并以/结尾时,如果您要在RegExp中使用斜杠,则需要转义它们,否则解释程序如何知道这是一个斜杠字符而不是结尾您的RegExp?如果你使用的是字符串,它知道它不是,所以你不需要逃避。

在过去,试试这个:

"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