0

目前我正在使用下面的搜索。我假设用户键入的每个术语都必须在文章中至少出现一次。我使用正则表达式的匹配方法

^(?=.*one)(?=.*two)(?=.*three).*$

, g,im

目前我使用matches.length来计算匹配的数量,但行为并不像预期的那样。例如:“ one two three. one two three”会给我 2 个匹配项,但实际上应该是 6 个。

如果我做类似的事情

(one|two|three)

那么我确实得到了 6 场比赛,但如果我有数据:

"one two. one two"

我得到 4 个匹配项,而实际上我希望它为 0,因为并非每个单词都至少出现一次。我可以做第一个正则表达式来检查是否至少有一个“匹配”。如果有,我随后会使用第二个正则表达式来计算实际匹配数,但这会使我的程序运行速度比现在慢得多。对 2500 篇 json 文章执行此正则表达式需要 60 到 120 秒。

关于如何使它更快或更好的任何想法?更改正则表达式?使用搜索或 indexOf 代替匹配?


注意:我正在使用草坪椅数据库进行本地持久性和 jquery。我将 phonegap 的代码打包为一个 chrome 打包的应用程序。

4

1 回答 1

0
var input = '...';
var match = [];
if (input.match(/^(?=.*\bone\b)(?=.*\btwo\b)(?=.*\bthree\b)/i)) {
  match = input.match(/\b(one|two|three)\b/ig);
}

在此处测试此代码。

于 2012-10-18T11:59:31.917 回答