检查字符串是否包含数组中存在的任何关键字

时间:2017-12-31 14:24:34

标签: javascript ecmascript-6 ecmascript-2016

我正在尝试根据数组中存在的关键字过滤某些内容,但不确定如何执行此操作,尝试使用includesindexofsearch函数,但在我的情况下,它没有起作用。

我的第一次尝试:

const filters = ['movie', 'food']
contents
 .filter( content => filters.includes(content.name))

问题是content.name是一个包含多个单词的字符串,例如"观看您最喜欢的电影","投票选择您最喜欢的食物"等我想要检查字符串是否包含filters变量中的一个关键字。目前includes()会返回false,因为它正在尝试匹配确切的字符串。

1 个答案:

答案 0 :(得分:7)

您需要针对每个filters检查content.name中的每个字词。您可以使用.some()执行此操作,当找到匹配项时,true会返回const filters = ['movie', 'food'] const result = contents.filter(content => filters.some(s => content.name.includes(s)) ) (并提前停止搜索)。

.includes()

请注意,.test()会匹配单词的子部分。您需要建立单词边界,可能使用正则表达式,以获得完整的单词匹配。

您可以通过创建正则表达式数组而不是字符串,并使用正则表达式的const filters = [/\bmovie\b/, /\bfood\b/] const result = contents.filter(content => filters.some(re => re.test(content.name)) ) 方法来完成此操作。

i

const filters = /\b(?:movie|food)\b/ const result = contents.filter(content => filters.test(content.name)) 修饰符添加到每个正则表达式中,如果它应该是不区分大小写的匹配。

或者代替正则表达式数组,您可以使用单个正则表达式。

node {
    environment {
        ENV_1 = 'value1'
    }
    env.ENV_2 = 'value2'

    echo "${env.ENV_1}" // not worked (null)
    echo "${env.ENV_2}" // worked (value2)

}