提问人:sdoedos 提问时间:11/16/2023 最后编辑:sdoedos 更新时间:11/16/2023 访问量:55
正则表达式前瞻性能问题 nestjs, mongodb [重复]
Regex lookahead performance issues nestjs, mongodb [duplicate]
问:
使用Nestjs和Mongodb,尝试在数据库中搜索包含所有关键字(这是一个字符串数组)的所有“摘要”。
它有效,但性能真的很差,有谁知道任何其他替代方案或更好的做法?
filters.keywords = 字符串数组 / string[]
MongoDB 中的 summary 字段只是一个字符串。
const regex = new RegExp(
'(?=.*?\\b' + filters.keywords.join(')(?=.*?\\b') + ').*',
'i',
);
return this.articleModel
.find({
summary: { $regex: regex },
})
.exec();
答:
2赞
sln
11/16/2023
#1
将 BOS 和 EOS 添加到正则表达式中。
去掉点并替换为也匹配换行符的点。.
[\S\s]
var filters = ['howdy','dooty','tooty'];
const regex = new RegExp(
"^(?=[\\S\\s]*\\b" + filters.join(")(?=[\\S\\s]*\\b") + ")[\\S\\s]*$", "i"
);
console.log(regex);
输出 /^(?=[\S\s]*\bhowdy)(?=[\S\s]*\bdooty)(?=[\S\s]*\btooty)[\S\s]*$/i
评论
0赞
sln
11/20/2023
当然,这是 Match 精确字符串的副本,但一切都不是吗,真的吗?但是像正则表达式这样的密码不是一个精确的字符串。管理员,这怎么可能是真正的重复?显然不是。很难相信所有帐户的重复行为标记都得到了 SO 的认可。是吗?95% 的正则表达式问题被标记为重复或由单个成员关闭。一页包含 20 个正则表达式问题,涵盖 3 天。意味着没有人在使用 SO。广告是怎么想的?
评论
'\\b(?:' + filters.keywords.join('|') + ')'