Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中使用正则表达式的基本搜索排名_Javascript_Jquery_Regex_Lawnchair - Fatal编程技术网

javascript中使用正则表达式的基本搜索排名

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个匹配项,但实际上我

目前我正在使用下面的搜索。 我假设用户类型的每个术语在文章中至少出现一次。 我对regex使用match方法

^(?=.*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而不是第一个。匹配吗?