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

Node.js与MongoDB API正则搜索问题:含+号触发正则异常

解决正则表达式特殊字符引发的语法错误问题

嘿,这个坑我之前也踩过!问题根源在于+是正则表达式里的特殊元字符,它的作用是匹配前面的字符一次或多次。当你的搜索词直接以+开头时,正则引擎找不到它要重复的前置字符,自然就抛出了Invalid regular expression: /.*+.*/: Nothing to repeat这个错误。

解决方案:转义正则特殊字符

我们需要把用户输入的搜索词里所有正则特殊字符(比如+、*、.、?这些)都转义成普通字符,这样正则引擎就会把它们当作字面量来匹配了。

首先写一个简单的转义函数:

function escapeRegExp(input) {
  // 转义所有正则表达式特殊字符
  return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

然后修改你原本的代码,用这个函数处理用户输入的phone参数:

const escapedPhone = escapeRegExp(req.params.phone);
collection.find({ "phone": new RegExp(escapedPhone, 'i') }, function (err, task) {
  if (err) res.send(err);
  res.json(task);
});

为什么这样有效?

转义之后,用户输入的+会被转换成\+,正则引擎就会把它当作普通的加号字符去匹配,而不是试图解析成重复操作符。这样不管用户输入什么包含特殊字符的搜索词,都不会再触发正则语法错误,同时依然保留了“不区分大小写匹配包含搜索词的文档”的原有功能。

内容的提问来源于stack exchange,提问作者Muhammad Usman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:57:29