我今天来找你是因为我有点麻烦。我目前正在处理 csv 导入并将数据转换为数据库中具有模型的对象。我向 API 发送了一个对象名称,然后使用 $or 进行了搜索,是否使用复数形式:
if (req.query.name) {
params.$or = [
{name: { '$regex' : new RegExp(req.query.name+'(?!es|s|x)'), '$options' : 'ig' }},
{name: { '$regex' : new RegExp(req.query.name), '$options' : 'ig' }},
]
}
问题是,例如,如果我发送“盒子”并且模型称为“盒子(小)”,则它不起作用。但是,如果我发送“盒子”,它就会起作用。你能告诉我我的问题吗?它来自正则表达式。
编辑:即使我发送“boxes”,我也想找到“box”这个词。基本上找到单词是复数还是单数
提前致谢!
(对不起我的英语,我是法国人)
最佳答案
您需要删除搜索词末尾的 (?:es|[sx])
(您可以使用 .replace(/(?:es|[sx]) $/, '')
) 并添加一个可选组,而不是否定前瞻:
new RegExp(req.query.name.replace(/(?:es|[sx])$/, '') + '(?:es|[sx])?')
参见 regex demo .
如果正则表达式引擎找到 es
、s
或 ,则
紧跟在 (?!es|s|x)
否定先行匹配失败>xreq.query.name
值之后,而您希望有选择地匹配字符串的一部分。
关于javascript - 在 MongoDB 中搜索复数词形式时查找复数词和单数词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51321053/