在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也能正常搜索呢?
一般来说,空格符在搜索关键字里面,代表分隔符,将查询内容分隔为多个关键字,即
关键字:
肚子
代表搜索与肚子相关的内容关键字:
肚子 想吃饭
代表搜索同时包含肚子和想吃饭的内容你先要弄清楚,你想搜索的内容是
包含
肚子 想吃饭
的内容还是同时包含
肚子
和想吃饭
的内容你
new RegExp(keywords, 'i')
这个代码,肯定是有问题的,如果 keywords 中包含正则的关键字呢,怎么办?上网找了个正则,你可以试试
/(?=.?aa)(?=.?bb)/mg 匹配同时包含 aa和 bb 的内容
将关键字转义,关键字包括
^$()*+?.|[]{}