You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用正则匹配路由.dcm/.v2后缀文件名失效问题

Node.js路由路径正则匹配问题修复

需求说明

开发Node.js服务时需要校验/api/dicom/filename格式的路由,匹配满足以下规则的文件请求:

  • 文件名(不含后缀)字符数不少于3个
  • 文件后缀为.dcm或.v2

合法请求路径示例:

/api/dicom/f:/programas/appprog/dicomserver150c/data/86557/1.3.46.670589.30.1.6.1.116520970982.1481396383125.1_0002_000001_16575404220008.dcm

原有代码问题

原有匹配规则无法命中目标路径,存在多处错误:

app.get(/^[A-Za-z_.\/\\:]{3,}.(?:v2|dcm)$/i, (req, res, next) => {
  console.log(req.path)
})
  • 正则未匹配固定前缀/api/dicom/,从路径起始位置就匹配失败
  • 字符集[A-Za-z_.\/\\:]未覆盖路径中存在的数字等合法字符,示例路径中的数字段无法被匹配
  • 后缀前的.未转义,正则中未转义的.代表匹配任意单个字符,规则不严谨
  • 未对文件名长度做精准校验,无法满足“文件名字符数不少于3个”的要求

修正后代码

直接替换正则规则即可:

app.get(/^\/api\/dicom\/.+[^/]{3,}\.(?:dcm|v2)$/i, (req, res, next) => {
  console.log(req.path)
  // 写入后续业务逻辑
})

正则规则说明

  • ^\/api\/dicom\/:从路径起始位置强制匹配固定路由前缀
  • .+:匹配前缀后任意长度的目录路径部分
  • [^/]{3,}:匹配最后一个斜杠之后、后缀点之前的文件名主体,长度至少3个字符,满足长度要求
  • \.(?:dcm|v2)$:匹配路径末尾的.dcm或.v2后缀,转义后的.仅匹配实际的点字符,$强制匹配到路径结尾,过滤后缀后带多余字符的非法请求
  • 修饰符i表示不区分大小写,可兼容.DCM、.V2等大写后缀的请求

内容的提问来源于stack exchange,提问作者Luiz Alves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:15:37