我今天来找你是因为我有点麻烦。我目前正在进行csv导入,并将数据转换为具有数据库模型的对象。我向API发送了一个对象名称,并使用$进行了带或不带复数的搜索:
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”。基本上找到单词是复数还是单数
提前谢谢!
(对不起,我的英语,我是法语)
答案 0 :(得分:1)
您需要在搜索词的末尾删除(?:es|[sx])
(可以使用.replace(/(?:es|[sx])$/, '')
)并添加可选的组,而不是否定的前瞻:
new RegExp(req.query.name.replace(/(?:es|[sx])$/, '') + '(?:es|[sx])?')
请参见regex demo。
如果正则表达式引擎在(?!es|s|x)
值之后立即发现es
,s
或x
,则req.query.name
否定超前匹配失败,而您想(可选)匹配字符串的一部分。