检查字符串是否包含数组中存在的任何关键字
Check if string contains any keywords that exists in array
我正在尝试根据数组中存在的关键字过滤一些内容,但不确定该怎么做,尝试使用 includes
、indexof
和 search
函数,但它对我不起作用。
我的第一次尝试:
const filters = ['movie', 'food']
contents
.filter( content => filters.includes(content.name))
问题是 content.name
是一个包含多个单词的字符串,例如 "watch your favourite movie"、"vote for your favourite food" 等,我想检查一个字符串是否包含过滤器中的关键字之一多变的。当前 includes()
returns false
因为它正在尝试匹配确切的字符串。
您需要对照每个 content.name
检查 filters
中的每个单词。您可以使用 .some()
来做到这一点,当找到匹配项时,它将 return 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))
我正在尝试根据数组中存在的关键字过滤一些内容,但不确定该怎么做,尝试使用 includes
、indexof
和 search
函数,但它对我不起作用。
我的第一次尝试:
const filters = ['movie', 'food']
contents
.filter( content => filters.includes(content.name))
问题是 content.name
是一个包含多个单词的字符串,例如 "watch your favourite movie"、"vote for your favourite food" 等,我想检查一个字符串是否包含过滤器中的关键字之一多变的。当前 includes()
returns false
因为它正在尝试匹配确切的字符串。
您需要对照每个 content.name
检查 filters
中的每个单词。您可以使用 .some()
来做到这一点,当找到匹配项时,它将 return 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))