我想出了一个正则表达式来匹配包含特定短语的术语,该短语可以包含字母或数字,但不包括破折号。例如,test-123
、test123
和 test
都将通过 ^[test0-9._-]+$ 进行匹配/gi
.
但是,在 MongoDB 中,我不太确定如何动态搜索它。我试过了,
const { search } = req.query;
const regex = new RegExp(`/^[${search}0-9._-]+$/`, "ig");
const results = await Test.find({ name: { $regex: regex } })
我也尝试过
await Test.find({ name: { $regex: ".*[" + search + "0-9._-]+$.*", $options: "i" } })
而且,
const regex = new RegExp(`/^[${search}0-9._-]+$/`, "ig");
await Test.find({ name: regex });
不知道如何让它工作,我做错了什么?
最佳答案
打印 new RegExp(
/^[${search}0-9._-]+$/, "ig")
返回以下模式 /\/^[test0-9._-]+$\//gi
这可能不是您想要实现的目标(额外的斜杠)。
您可以尝试这种方式(在 Mongo Shell 中测试):
let search = "test";
let regex = new RegExp(`^[${search}0-9._-]+$`, "ig");
db.test.find({ name: { $regex: regex } });
关于javascript - 如何在 MongoDB 中创建动态正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59554604/