javascript中使用正则表达式的基本搜索排名
目前我正在使用下面的搜索。 我假设用户类型的每个术语在文章中至少出现一次。 我对regex使用match方法javascript中使用正则表达式的基本搜索排名,javascript,jquery,regex,lawnchair,Javascript,Jquery,Regex,Lawnchair,目前我正在使用下面的搜索。 我假设用户类型的每个术语在文章中至少出现一次。 我对regex使用match方法 ^(?=.*one)(?=.*two)(?=.*three).*$ 使用g、i和m 目前,我使用matches.length来计算匹配数,但其行为与预期不符。 例子: “一二三。一二三” 会给我2根火柴,但实际上应该是6根 如果我做了类似的事情 (one|two|three) 然后我得到6个匹配项,但如果我有数据: "one two. one two" 我得到4个匹配项,但实际上我
^(?=.*one)(?=.*two)(?=.*three).*$
使用g
、i
和m
目前,我使用matches.length来计算匹配数,但其行为与预期不符。
例子:
“一二三。一二三
”
会给我2根火柴,但实际上应该是6根
如果我做了类似的事情
(one|two|three)
然后我得到6个匹配项,但如果我有数据:
"one two. one two"
我得到4个匹配项,但实际上我希望它为0,因为不是每个单词都至少出现一次。
我可以用第一个正则表达式检查是否有至少一个“匹配”。如果有,我随后会使用第二个正则表达式来计算匹配的实际数量,但这会使我的程序运行速度比现在慢得多。针对2500篇json文章执行此正则表达式需要60到120秒
关于如何使这更快或更好,有什么想法吗?换正则表达式?使用search或indexOf代替matches
注: 我正在使用lawnchair db进行本地持久性和jquery。我将phonegap的代码打包,并将其作为chrome打包的应用程序
var input = '...';
var match = [];
if (input.match(/^(?=.*\bone\b)(?=.*\btwo\b)(?=.*\bthree\b)/i)) {
match = input.match(/\b(one|two|three)\b/ig);
}
测试此代码如果要搜索包含“一”、“二”和“三”的字符串,则只有两个(不是六个)字符串包含一、二和三。。。为什么这是一个错误?你可以分两步来做。首先只需使用
^(?=.*one)(?=.*two)(?=.*three)
查看字符串是否匹配,然后使用替代形式获取计数。我想我不得不说,使用通配符(.*)
会导致regex性能不佳,所以如果您有长字符串,您应该避免这种情况.indexOf
可能是更好的选择。编辑:我刚刚注意到你自己确实认为:)@FelixKling是对的(因此这是作为评论而不是答案发布的),要完成你在正则表达式方面所寻找的东西,你可以这样做:^(?=.*one)(?=.*two)(?=.*three)(\W*(one | two | three))+
使用起来会更快吗。indexOf!=-1而不是第一个。匹配吗?