Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.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_Performance_Node.js - Fatal编程技术网

javascript:在字符串中查找所有匹配的关键字

javascript:在字符串中查找所有匹配的关键字,javascript,performance,node.js,Javascript,Performance,Node.js,我试图解析一大块文本,以找到所有匹配的关键字 我有一个数组中的所有关键字 例如: var string = "hi, I need support for apple, android and nokia phones."; var keywords = ['apple', 'nokia', 'android']; for(i=0;i<keywords.length; i++){ var match = string.match(keywords[i]); consol

我试图解析一大块文本,以找到所有匹配的关键字

我有一个数组中的所有关键字

例如:

var string = "hi, I need support for apple, android and nokia phones.";

var keywords = ['apple', 'nokia', 'android'];

for(i=0;i<keywords.length; i++){
    var match = string.match(keywords[i]);
    console.log(match);
}
var string=“嗨,我需要苹果、安卓和诺基亚手机的支持。”;
var关键字=[“苹果”、“诺基亚”、“安卓”];

对于(i=0;i,正如@freakish所说,将它们组合到一个regexp中更有效(如果有一个像样的regex引擎)。当然,这要求匹配不重叠,如果需要,必须逐个测试

var match = string.match(new RegExp(keywords.join("|"), "g"));

单向;不区分大小写,全字,无重复

var string = "hi, I need support for apple, android and nokia phones.";

var keywords = ['apple', 'nokia', 'android'];
var results = [];
for(var i = 0; i < keywords.length; i++) {
    if ((new RegExp("\\b" + keywords[i] + "\\b", "i").test(string)) {
        results.push(keywords[i]);
    }
}

alert( "contains: " + results );
var string=“嗨,我需要苹果、安卓和诺基亚手机的支持。”;
var关键字=[“苹果”、“诺基亚”、“安卓”];
var结果=[];
对于(var i=0;i
这个问题更适合我们的姐妹网站。将关键字组合成正则表达式。如果您想匹配单词而不是子字符串(不区分大小写,同上)
string.match(新的RegExp(“\\b”+关键字[i]+“\\b”,“gi”),则添加单词边界非常重要;
假设关键字中没有任何内容需要转义(如果不需要计算匹配项,最好不要使用“g”),那么“big”有多大?你有多少个关键字?它们是否重叠?你只想搜索整个单词吗?你需要所有匹配项还是只测试其中至少一个是否明显?@Bergi big就像一个邮件正文,大约有25-30个关键字。关键字不重叠,但字符串可以多次出现关键字。我想搜索整个单词。我想获取所有匹配的关键字。这很有效,但如果字符串包含多个关键字,则会给我重复匹配。是否循环并删除重复项?所以您只想知道每个关键字是否至少发生一个CE?您的问题不清楚。@ChiragJain:我认为您不能使用单个regex,然后比使用更高效您已经拥有的-但您可能希望从
match
切换到
indexOf
newregexp(“\\b”+关键字+”\\b”).test
在chrome中使用match是jsperf,显示速度更快。我删除了边界,因为匹配关键字作为子字符串也很好。jsperf在这里:顺便说一句,我正在使用node.js,所以我只考虑chrome测试,尽管indexof在firefox中快得多。无论如何,它们之间都有细微的差别。尽管您需要Bergi和@AlexK的帮助第二次讨论。是的,我想到了这个解决方案。我想知道我们是否可以用一个正则表达式来完成它。你觉得怎么样?可能吧,但我看不出如何在一个表达式中同时抑制重复项。循环每个项的速度仍然很快,以至于无法被注意到。好的。一个正则表达式和重复项如何。然后我们循环结果以删除重复项重复。这在多个正则表达式上会很快吗?@ChiragJain:测试一下!不知道,jeperf.com一些测试。这听起来像是一个过早的优化方法,也就是说,根本不需要优化,因为它远低于人类的感知,即使输入量很大,也能有效地实现即时优化