node.js如何在字符串中搜索数组中的值

时间:2018-04-03 17:42:58

标签: javascript arrays search indexof

这很难解释所以我只是举个例子。 我有一系列特定的关键字,如下:

const keywordArr = ['jim', 'john'];

然后我有一个字符串:

const message = 'Hello john, how are you doing today?'

我想检查message是否包含来自keywordArr的值。我知道我可以循环遍历keywordArr中的每个值并检查如下:

keywordArr.forEach(function(word) {
    if (message.toLowerCase().includes(word)) {
         rest of code here..
    }
}

但是,我每秒钟会收到大约5条消息,因此该方法会非常耗费性能。有没有有效的方法来做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以使用forEach()表示数组,使用match()检查字符串是否包含。

<强>样本

&#13;
&#13;
/login
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用RegExp.test()regex101示例)检查数组是否包含任何单词。

&#13;
&#13;
const keywordArr = ['jim', 'john'];

const message = 'Hello john, how are you doing today?'

const pattern = new RegExp(`\\b${keywordArr.join('|')}\\b`, 'gi');
const contains = pattern.test(message);

console.log(contains);
&#13;
&#13;
&#13;

答案 2 :(得分:1)

返回true / false

我们可以使用reduceincludes执行此操作,如果您没有进入整个RegExp的事情:

&#13;
&#13;
const keywordArr = ['jim', 'john'];

const message = 'Hello john, how are you doing today?'

let has = keywordArr.reduce((r,v) => message.toLowerCase().includes(v.toLowerCase()) || r, false)

console.log(has)
&#13;
&#13;
&#13;

这将与不区分大小写匹配。如果您想要区分大小写的匹配,请删除这两种toLowerCaser()方法。

返回名称

我们可以通过添加&& v来修改reduce函数,true/false将返回值而不是false值。我们还会将起始值从const keywordArr = ['jim', 'john']; const message = 'Hello john, how are you doing today?' let name = keywordArr.reduce((r,v) => message.toLowerCase().includes(v.toLowerCase()) && v || r, '') console.log(name)修改为空字符串。

&#13;
&#13;
&& v
&#13;
&#13;
&#13;

返回一个名称数组

如果我们想要返回字符串中所有名称的列表,我们可以用&& r.concat(v)替换const keywordArr = ['jim', 'john', 'paul']; const message = 'Hello john, how are you doing today? -- jim' let names = keywordArr.reduce((r,v) => message.toLowerCase().includes(v.toLowerCase()) && r.concat(v) || r, []) console.log(names),然后将空字符串中的起始值替换为空数组。

&#13;
&#13;
            <p class="descriptive-class">
               <a ng-href="" onclick="window.open('https://stackoverflow.com', '_system', 'location=yes')">
                  <img src="assets/img/awesome_picture.png" alt="blablabla">
               </a>
            </p>
&#13;
&#13;
&#13;