如何将searchtext变量传入NeDB的搜索查询正则表达式中
在NeDB中用变量构建正则实现标题模糊搜索
要把searchtext变量传入NeDB的正则查询里,不能用字面量的/.../写法,得用JavaScript的RegExp构造函数来动态创建正则表达式。
直接给你修改好的代码:
app.get("/search", (req, res) => { const searchtext = req.query.search; // 用RegExp构造函数创建正则,第二个参数'i'表示忽略大小写(可选,按需添加) const searchRegex = new RegExp(searchtext, 'i'); storydb.find({ title: searchRegex }, function (err, output) { if (err) { console.log(err); } else { console.log(output); } }); res.render("search"); });
补充说明:
RegExp(searchtext, 'i')里的'i'是可选标志,加上后搜索会忽略大小写,比如搜"test"能匹配"Test"或"TEST",提升用户体验- 如果你的
searchtext可能包含正则特殊字符(比如.、*、?这些),最好先转义,避免这些字符被当作正则语法解析,比如可以加个简单的转义函数:
function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); } // 然后创建正则时用转义后的字符串 const searchRegex = new RegExp(escapeRegExp(searchtext), 'i');
内容的提问来源于stack exchange,提问作者Nsikan Simon
相关产品推荐
相关产品推荐

