正则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