在MongoDB中搜索复数形式的单词时,要查找复数形式和单数形式的单词

时间:2018-07-13 08:38:20

标签: javascript node.js regex mongodb

我今天来找你是因为我有点麻烦。我目前正在进行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”。基本上找到单词是复数还是单数

提前谢谢!

(对不起,我的英语,我是法语)

1 个答案:

答案 0 :(得分:1)

您需要在搜索词的末尾删除(?:es|[sx])(可以使用.replace(/(?:es|[sx])$/, ''))并添加可选的组,而不是否定的前瞻:

new RegExp(req.query.name.replace(/(?:es|[sx])$/, '') + '(?:es|[sx])?')

请参见regex demo

如果正则表达式引擎在(?!es|s|x)值之后立即发现essx,则req.query.name否定超前匹配失败,而您想(可选)匹配字符串的一部分。