首页 > 解决方案 > 如何将正则表达式与数字一起使用

问题描述

我是编程和构建我的第一个全栈应用程序的新手。在我的应用程序中,我有两个实体,分支机构和帐户。分支名称是字母数字字符串,而帐户只是数字,例如 116003183、16582368。这种情况是,当用户输入分支的前几个字母时,所有匹配的结果都会显示出来。我无法对帐户做同样的事情,因为那是所有数字。我查看了几个可以使用 [0-9] 的网站,但我不知道如何实现该代码。这是我的代码。任何帮助或线索将不胜感激。

router.get('/', async (req, res) => {
let query = Account.find()
if (req.query.name != null && req.query.name != ''){
query= query.regex('name',new RegExp(req.query.name))
    }  
 try{
 const accounts = await query.exec()
 res.render('accounts/index',{
 accounts: accounts,
 searchOptions:req.query
 })
 }
 catch(err) {

 res.redirect('/')
  }        
  })

标签: node.jsregexregexp-substr

解决方案


使用$expr-运算符,您可以构建一个查询,将类型的帐户名称字段转换为number字符串,然后对该字段进行正则表达式匹配:

// ...
const query = {};
if (req.query.name != null && req.query.name != ''){
   query.$expr = {
        "$regexMatch": {
           "input": {"$toString": "$name"}, 
           "regex": new RegExp(req.query.name)
        }
    }
}
const accounts = await Account.find(query);
// ...

推荐阅读