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

如何实现文本字符串与数组的相似匹配并高亮标记匹配项

需求可行性结论
  • 该需求可直接实现。你当前场景为邮件模板内容生成,仅需在拼接newBody环节对匹配项增加加粗标记即可:如果是HTML格式邮件,用<strong>标签搭配高亮样式包裹匹配项兼容性最好;如果是支持Markdown渲染的场景,直接用**包裹匹配项即可达到你示例中的效果。
核心实现逻辑
  • 确定匹配基准:取前端传入的context.body字符串作为匹配对照值,先做去空格、去多余换行符的预处理,避免格式问题导致匹配失效。
  • 匹配规则选择:如果是你示例中的完全匹配场景,直接做等值判断即可;如果需要模糊相似度匹配,可以用编辑距离算法计算两个字符串的相似度,设置阈值(如相似度≥80%判定为匹配)即可。
  • 遍历待比对数组:逐个校验数组项是否命中匹配规则,命中项外层包裹加粗标记,未命中项保留原值,最后拼接为符合要求的newBody字符串传入邮件上下文。
适配现有业务代码的修改方案

你原有代码生成newArr和newBody的部分存在数组未手动拼接导致默认带逗号分隔符的问题,可直接替换为以下逻辑:

// 预处理匹配基准值,去除首尾空格、换行符
const matchTarget = (context.body ?? '').toString().trim().replace(/\n/g, '');

const newArr = [];
ans.filter(element => {
  if (resultFilter.includes(element.content)) {
    // 提取纯文本文件名用于匹配,去掉拼接的<br />标签
    const pureFileName = element.fileName.replace(/<br\s*\/?>/g, '').trim();
    let finalFileName = element.fileName;

    // 匹配判断,此处为完全匹配逻辑,模糊匹配可替换为相似度计算函数
    if (pureFileName === matchTarget) {
      // HTML邮件场景用带高亮样式的strong标签,Markdown场景替换为 `**${pureFileName}**<br />`
      finalFileName = `<strong style="background:#fff2cc;color:#d46b08">${pureFileName}</strong><br />`;
    }

    newArr.push({
      fileNameC: finalFileName
    })
  }
})

// 原有逻辑未join会出现数组默认逗号,此处手动拼接为空字符串
newBody = `• ${newArr.map(item => item.fileNameC).join('')}`;
可选扩展:模糊相似度匹配实现

如果需要支持非完全匹配的相似内容识别,可以在代码中加入如下编辑距离相似度计算函数,替换上面的等值判断逻辑即可:

/**
 * 计算两个字符串的相似度,返回值范围0-1,值越高越相似
 */
function getStringSimilarity(str1: string, str2: string): number {
  const len1 = str1.length;
  const len2 = str2.length;
  const dp: number[][] = Array(len1 + 1).fill(null).map(() => Array(len2 + 1).fill(0));
  for (let i = 0; i <= len1; i++) dp[i][0] = i;
  for (let j = 0; j <= len2; j++) dp[0][j] = j;
  for (let i = 1; i <= len1; i++) {
    for (let j = 1; j <= len2; j++) {
      const cost = str1[i - 1] === str2[j - 1] ? 0 : 1;
      dp[i][j] = Math.min(
        dp[i - 1][j] + 1,
        dp[i][j - 1] + 1,
        dp[i - 1][j - 1] + cost
      );
    }
  }
  const maxLen = Math.max(len1, len2);
  return maxLen === 0 ? 1 : (maxLen - dp[len1][len2]) / maxLen;
}

// 使用时替换等值判断即可,阈值可根据业务调整
if (getStringSimilarity(pureFileName, matchTarget) >= 0.8) {
  // 命中匹配,加加粗标记
}

内容的提问来源于stack exchange,提问作者Izlia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:06:20