仅匹配字母数字字符

3
这个问题实际上是以下问题的扩展。 在匹配条件之前忽略特殊字符 我正在使用mongodb聚合来从表中查找一些产品。以下是我需要改进的查询的一部分。
{
   $match : { "name" :  { $regex :  "kdf8210"} }
}

现在它只匹配包含"kdf8210"这个单词的产品名称,但我也需要它与以下内容匹配。
kdf.8210, kdf-8210, kdf.82-10

基本上,匹配应该忽略中间的任何特殊字符。
我刚学到$where不能用作聚合管道的一部分,所以引用问题的答案没有太大帮助。
1个回答

4
您可以使用类似以下这样的方法:

您可以按照以下步骤进行操作:

^k[.-]?d[.-]?f[.-]?8[.-]?2[.-]?1[.-]?0$ 

这允许特殊字符 . - 在任何位置插入(除了开头或结尾)。
  • 如果您想允许更多的特殊字符,可以调整 [.-]
  • 如果您不想匹配整个字符串,请删除 ^ $ 锚定。

    • ^ 锚定断言我们在字符串开头
    • $ 锚定断言我们在字符串结尾

    请参见演示


    太好了,如果我也想让它不区分大小写怎么办? - Ankit
    @Ankit (?i:^k[.-]?.and-so-on.$)...换句话说,将正则表达式放在(?i: )构造中,其中"i"表示不区分大小写。 - DavidO
    我最终在Mongo中使用了类似于以下内容的东西。 'name' : /M[.-]?f[.-]?M[.-]?8[.-]?0/i - Ankit

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接