javascript - 在 MongoDB 中搜索复数词形式时查找复数词和单数词

标签 javascript node.js regex mongodb

我今天来找你是因为我有点麻烦。我目前正在处理 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 .

如果正则表达式引擎找到 ess,则 (?!es|s|x) 否定先行匹配失败>x 紧跟在 req.query.name 值之后,而您希望有选择地匹配字符串的一部分。

关于javascript - 在 MongoDB 中搜索复数词形式时查找复数词和单数词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51321053/

相关文章:

javascript - 拆分数字字符串时的意外结果

java - 正则表达式 : capture group NOT followed by

javascript - zurb foundation 3 中的固定宽度列

MySQL 连接池与 Node.js

mongodb - 使用 node.js/MongoDB/Mongoose 进行回调

javascript - NodeJS 获取 promise 回调挂起

javascript - 检查字符串是否以标点符号开头(Javascript)

regex - 可以使用正则表达式来匹配嵌套模式吗?

javascript - 在 JavaScript 中将一个对象附加到另一个对象时避免元数据

javascript - 使用 javascript usermedia 和网络音频 api 在浏览器上以恒定延迟播放和录制