如何使用Javascript在Regex中排除一些字符串?

时间:2018-05-18 11:04:15

标签: regex

我有流星应用,我需要从后端获取一些数据,数据样本就像

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

我怎样才能正确使用正则表达式?是我的查询错误或我应该如何形成它?

1 个答案:

答案 0 :(得分:1)

除了预期匹配中sm的明显问题(您的模式需要4 m s或s s,而预期匹配)(?!h|o)_存在问题。此模式意味着您要匹配既不是_也不是h的{​​{1}},这肯定是正确的。

你想要的是匹配除o之前的ho之类的任何字符,或字符串的开头。将其更改为_(它不允许[^ho]_在字符串的开头匹配)或_(其中(?:^|[^ho])_替代允许在字符串开头匹配)。< / p>