You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:检测字符串是否包含数组元素并返回所有匹配项

如何判断字符串是否包含数组中的任意成员并返回匹配项?

嘿,我明白你的需求啦!你想要检查一个目标字符串里是否包含给定数组中的任意元素,并且把所有匹配到的成员找出来——就像你举的例子里,title里包含了数组中的james(对应字符串里的James)和drink(对应字符串里的drinks),最终要返回这两个匹配项对吧?

下面我给你两种常见场景的实现方案:

场景1:返回数组中匹配的原始成员(不区分大小写)

这种情况是找出数组里所有能在目标字符串中找到的子串(忽略大小写),返回数组里的原始元素:

var cat_list = ["apple", "james", "hello", "drink"];
var title = "James always drinks water";

// 筛选数组中满足条件的元素
const matchedItems = cat_list.filter(item => {
  // 不区分大小写检查子串
  return title.toLowerCase().includes(item.toLowerCase());
});

console.log(matchedItems); // 输出: ["james", "drink"]

场景2:返回目标字符串中实际匹配的片段(保留原大小写)

如果你想要返回的是字符串里实际出现的内容(比如例子里的James而不是数组里的james),可以用正则表达式来实现:

var cat_list = ["apple", "james", "hello", "drink"];
var title = "James always drinks water";

// 把数组元素转成正则表达式的备选模式,注意转义特殊字符
const regexPattern = cat_list.map(item => 
  item.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
).join('|');
const regex = new RegExp(`(${regexPattern})`, 'gi');

// 提取所有匹配的结果
const matchedSegments = [];
let match;
while ((match = regex.exec(title)) !== null) {
  // 避免重复添加相同的匹配(如果字符串里多次出现同一元素)
  if (!matchedSegments.includes(match[0])) {
    matchedSegments.push(match[0]);
  }
}

console.log(matchedSegments); // 输出: ["James", "drink"]

注意事项

  • 如果你的需求是区分大小写的匹配,只需要去掉toLowerCase()或者正则里的i标志就可以了。
  • 如果数组里包含正则特殊字符(比如.、*),一定要记得转义,否则正则会出问题——上面的场景2里已经处理了这个情况。

内容的提问来源于stack exchange,提问作者mohamed amin mansourkhaki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:45:16