mongoose用正则表达式做全文检索的空白字符问题

发布于 2022-09-05 04:05:14 字数 418 浏览 17 评论 0

在express网站开发,我使用mongoose做全文检索,代码如下:

var keywords = req.query.keywords;
Article.find().where('content').equals(new RegExp(keywords, 'i'));

这在多数情况下可以正常检索,但若keywords裡面有包含中文字元,例如说:

var keywords = '肚子 想吃饭';
Article.find().where('content').equals(new RegExp(keywords, 'i'));

这时候会搜索不到content中包含'肚子 想吃饭'的mongoose资料。

请问要怎么做才能让有空白字元的keywords也能正常搜索呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

踏月而来 2022-09-12 04:05:14

一般来说,空格符在搜索关键字里面,代表分隔符,将查询内容分隔为多个关键字,即
关键字:肚子 代表搜索与肚子相关的内容
关键字:肚子 想吃饭 代表搜索同时包含肚子和想吃饭的内容

你先要弄清楚,你想搜索的内容是
包含肚子 想吃饭的内容
还是同时包含肚子想吃饭的内容

new RegExp(keywords, 'i')这个代码,肯定是有问题的,如果 keywords 中包含正则的关键字呢,怎么办?

上网找了个正则,你可以试试
/(?=.?aa)(?=.?bb)/mg 匹配同时包含 aa和 bb 的内容

将关键字转义,关键字包括
^$()*+?.|[]{}

new RegExp('12$31]23^'.replace(/([\^\$\(\)\*\+\?\.\\\|\[\]\{\}])/g, "\\$1"), 'g').test('12312312312$31]23^asdasd')
true
new RegExp('12$31]23^', 'g').test('12312312312$31]23^asdasd')
false

var keyword = '12$31]23^';
// 将正则关键字转义
keyword = keyword.replace(/([\^\$\(\)\*\+\?\.\\\|\[\]\{\}])/g, "\\$1");
new RegExp(keyword, 'mg')
葬心 2022-09-12 04:05:14

謝謝,我是要搜索:
包含肚子 想吃饭的内容
所以應該用不到/(?=.?aa)(?=.?bb)/mg 匹配同时包含 aa和 bb 的内容
對啊 如果包含到正則關鍵字就會壞了 謝謝

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文