gpt4 book ai didi

javascript - 如何改进多字匹配正则表达式

转载 作者:行者123 更新时间:2023-12-03 07:37:36 25 4
gpt4 key购买 nike

我目前让用户输入一个可以包含许多单词的搜索字符串。然后,我将每个单词分开,然后根据每个单词构建正则表达式。然后,我通过 MongoDB 使用正则表达式搜索来搜索包含 200,000 多个条目的列表。它运作良好,但性能相当糟糕。任何可能提高性能的正则表达式建议都将受到赞赏!

//this is an example search
var search = "angel alter";
var searchSplitted = search.split(" ");
var expression = '';
//This is how I build my regex
for(i=0; i<searchSplitted.length; i++){
expression += '(?=.*' + searchSplitted[i] + ')';
}
expression += '.*';

最佳答案

"A.*B" 是一个非常耗时的正则表达式,因为正则表达式搜索通常是贪婪的。因此它会找到 "A",然后 ".*" 将“消耗”整个剩余字符串,然后尝试匹配 "B"。如果失败,它将释放字符串末尾的一个字符并尝试再次匹配 "B"。将其乘以查询中的 ".*" 数量,您会得到非常差的性能。

创建更复杂的搜索查询而不是复杂的正则表达式会快得多。因此,不要尝试将搜索查询放入单个正则表达式中,而是尝试将其分解为简单搜索条件的连词,每个词一个。 IE。而不是“正则表达式匹配 A.*B.*C...”,而是写“(正则表达式匹配 A) AND (正则表达式匹配 B) AND (正则表达式匹配 C)...”。对单个单词的搜索比查询要快得多,如果失败,则会跳过任何后续条件,从而节省性能。

实际上,除非您在搜索查询中需要正则表达式功能,否则您可以完全摆脱正则表达式,用纯文本搜索替换它们,这样总是更快。

关于javascript - 如何改进多字匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35545149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com