我试图在 Express 中找到一些有关正则表达式的文档,但 Express API 中的信息非常稀疏。我正在尝试执行正则表达式匹配 objectID。 Express 文档中给出了有关正则表达式的示例。
router.get(/^\/commits\/(\w+)(?:\.\.(\w+))?$/, function(req, res){ ... });
我在我的路由器中尝试了以下操作,它似乎工作正常。
client.get('/staff/:id([0-9a-fA-F]{24})', function(req, res) { ... });
但是有一些差异我无法弄清楚......
- 我的示例被
'
包围,而 API 中的示例则不然。什么 意思是不是?我的表达式是字符串而不是正则表达式吗? - 我不使用:
/^
或?$/
。不太了解 正则表达式 我想这是某种 anchor 。我需要这个吗? - 我不会转义 URL
/staff/:id
的第一部分\
。这是我吗 应该做什么?
此外,有谁知道广泛资源用于阅读 Express 路由器中的正则表达式...或参数选项或我上面所做的任何事情...
最佳答案
路由匹配的源代码值得一读,但这里是简短的形式。
'abc'
是一个JS字符串;/abc/
是一个 JS 正则表达式。该字符串可用于创建正则表达式,这就是您正在做的事情。所以两者都是有效的。要查看差异,请尝试执行var re =/abc/
和var re = new RegExp('abc')
^
是起始 anchor ,而$
是结束 anchor 。^abc
将匹配“abc”、“abcde”,但不匹配“zabcd”,因为它需要以“abc”开头。abc$
将匹配“abc”、“zabc”,但不匹配“abcd”,因为它需要以“abc”结尾。- 当您使用以
/
开头并以/
结尾的实际 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
关于javascript - Express.js 路由器中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27269766/