代码之家  ›  专栏  ›  技术社区  ›  pabloBar

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

  •  4
  • pabloBar  · 技术社区  · 7 年前

    我试图根据数组中存在的关键字过滤一些内容,但不确定如何过滤,尝试使用 includes , indexof search 功能,但在我的情况下不起作用。

    我的第一次尝试:

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

    问题是 content.name 是一个包含多个单词的字符串,例如“观看你最喜欢的电影”、“为你最喜欢的食物投票”等。我想检查字符串是否包含filters变量中的一个关键字。目前 includes() 退货 false 因为它试图匹配精确的字符串。

    1 回复  |  直到 7 年前
        1
  •  7
  •   user8897421 user8897421    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 如果每个正则表达式应该是不区分大小写的匹配,则对其进行修饰符。

    或者,您可以使用单个regex来代替regex数组。

    const filters = /\b(?:movie|food)\b/
    const result = contents.filter(content => filters.test(content.name))