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

标签 javascript regex node.js express

我试图在 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/

相关文章:

javascript - offset() 未定义但 == 或 === 不这么认为

javascript - 在具有大型数据集的 HighStock 时间序列中设置附加点属性

java - 正则表达式匹配大写字符、数字和句点

java - 匹配器未找到匹配项

java - 使用正则表达式进行顺序v/s嵌套循环结构解析

使用 HTTP-AUTH 的 Node.js Express

c++ - 无法构建 Node C++ 插件

javascript - 使用 Google 跟踪代码管理器中的 JavaScript 替换 url 字符串中的参数

java - 在对网站进行负载测试时我应该忽略 Java 脚本吗?

Node.js ORM mysql 通过 SSH 隧道连接