我有流星应用,我需要从后端获取一些数据,数据样本就像
abc_xgsh_h_ssss
abc_xgsh_llll
abc_dfh_h_ssss
abc_xgsh_o_ssss
abc_xgsh_xyz_ssss
abc_ufvu_o_ssss
abc_xgsh_fgh_sss
abc_xgsh_mmm
我在执行以下命令时获取上述数据:
db.test.distinct('fieldName',{ "fieldName": { $regex: /\B(llll|mmmm|(?!h|o)_ssss)/i}});
我想要的是结果,
abc_xgsh_llll
abc_xgsh_xyz_ssss
abc_xgsh_fgh_sss
abc_xgsh_mmm
我怎样才能正确使用正则表达式?是我的查询错误或我应该如何形成它?
答案 0 :(得分:1)
除了预期匹配中s
和m
的明显问题(您的模式需要4 m
s或s
s,而预期匹配)(?!h|o)_
存在问题。此模式意味着您要匹配既不是_
也不是h
的{{1}},这肯定是正确的。
你想要的是匹配除o
之前的h
和o
之类的任何字符,或字符串的开头。将其更改为_
(它不允许[^ho]_
在字符串的开头匹配)或_
(其中(?:^|[^ho])_
替代允许在字符串开头匹配)。< / p>