Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express.js路由器中的正则表达式_Javascript_Regex_Node.js_Express - Fatal编程技术网

Javascript Express.js路由器中的正则表达式

Javascript Express.js路由器中的正则表达式,javascript,regex,node.js,express,Javascript,Regex,Node.js,Express,我试图在Express中找到一些关于正则表达式的文档,但是Express API中的信息非常稀少。我想做一个正则表达式匹配objectID。Express文档中给出了这个关于regex的示例 router.get(/^\/commits\/(\w+)(?:\.\.(\w+))?$/, function(req, res){ ... }); 我在我的路由器上尝试了以下方法,似乎效果不错 client.get('/staff/:id([0-9a-fA-F]{24})', function(

我试图在Express中找到一些关于正则表达式的文档,但是Express API中的信息非常稀少。我想做一个正则表达式匹配objectID。Express文档中给出了这个关于regex的示例

router.get(/^\/commits\/(\w+)(?:\.\.(\w+))?$/, function(req, res){ ... });    
我在我的路由器上尝试了以下方法,似乎效果不错

client.get('/staff/:id([0-9a-fA-F]{24})', function(req, res) { ... }); 
但是有一些差异我无法理解

  • 我的示例在
    中,API中的示例不是。什么 这意味着什么?我的表达式是字符串而不是正则表达式吗
  • 我不使用:
    /^
    ?$/
    。不太了解 我猜这是某种锚。我需要这个吗
  • 我不会逃避
    \
    我的URL的第一部分
    /staff/:id
    。这是我想要的吗 该怎么办

还有,有人知道在Express路由器中阅读regex的广泛资源吗。。。或者参数选项或者我在上面做的任何事情

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

  • '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

请去掉复选标记,因为我认为我的答案是关于字符串部分的错误。当字符串传入时,express.js似乎有不同的处理方式。是的,我也意识到了这一点。尽管如此,您还是给了我很多关于regex部分的好信息(=)
:id
部分需要使用
param