mongodb模糊匹配正则转义

           阅读(1120)  2017-11-04 10:42:03

如果我要根据标题和内容搜索关键字,可以如下写法:

  return this.find({
    '$or': [
      {title: new RegExp(keyword, 'i')},
      {content: new RegExp(keyword, 'i')}
    ]
  })
  .sort({ 'pv': -1 })
  .exec();

但是,keyword关键字有特殊字符如++,假如我要搜索c++关键字就失败了。

这时要对关键字中的特殊字符进行转义,通过正则表达式统一转义,RegExp写法加双斜杠:

const keyword = name.replace(/([\^\$\(\)\*\+\?\.\\\|\[\]\{\}])/g, "\\$1");

mongodb正则表达式下面写法,keyword特殊字符转义需要加单斜杠

{title: /keyword/i}

完整代码:

PostSchema.statics.searchPost = function(name) {
  const keyword = name.replace(/([\^\$\(\)\*\+\?\.\\\|\[\]\{\}])/g, "\\$1");
  return this.find({
    '$or': [
      {title: new RegExp(keyword, 'i')},
      {content: new RegExp(keyword, 'i')}
    ]
  })
  .sort({ 'pv': -1 })
  .exec();
};

文章评论

Keep it simple,stupid
文章数
283
总访问量
260160
今日访问
490
最近评论

ningto : 请到next.ningto.com里发表评论。
tujiaw : 抱歉csdn code服务关闭了,这个代码我也找不到了
于淞 : 你好,这个文章的源码能分享一下吗,songsong9181@163.com,谢谢了 上面的写错了
于淞 : 你好,这个文章的源码能分享一下吗,838106303@163.com,谢谢了 上面的链接不能用了
tujiaw : 多谢多谢
essaypinglun college-paper.org : 很好的博客,赞赞
Folly : 这个实现有点奇怪,Qt为什么没有统一的比对方法。
过多s : alert("hello, world!")
tujiaw : 还不错哦
回到顶部