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

ReactJS自动添加Tooltip:基于字典匹配文本生成提示组件

解决方案

核心思路是把输入字符串拆分成「匹配字典关键词的片段」和「普通文本片段」,分别处理后拼接成React元素数组,最后用span包裹返回。具体步骤和代码如下:

1. 预处理字典,生成最优正则规则

为避免短词优先匹配(比如字典同时有"React"和"React Native"时,要先匹配长词条),先把字典的key按长度从长到短排序,再生成匹配完整词汇的正则:

// 假设你的字典是 importedDict
const sortedKeys = Object.keys(importedDict).sort((a, b) => b.length - a.length);
// 转义特殊字符避免正则语法冲突,用\b确保匹配完整词汇
const regexPattern = sortedKeys.map(key => `\\b${escapeRegExp(key)}\\b`).join('|');
const keywordRegex = new RegExp(regexPattern, 'g');

// 辅助函数:转义正则特殊字符
function escapeRegExp(str) {
  return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

2. 实现字符串拆分与转换函数

function convertTextToTooltipSpan(inputText) {
  // 用正则拆分字符串,保留匹配的关键词和普通文本
  const fragments = inputText.split(keywordRegex);
  
  // 遍历片段,转换匹配关键词为Tooltip
  const elements = fragments.map((fragment, index) => {
    if (importedDict.hasOwnProperty(fragment)) {
      // 用已有的defToToolTip处理匹配到的关键词,加唯一key避免React警告
      return defToToolTip(fragment, importedDict[fragment], { key: `tooltip-${index}` });
    }
    // 过滤拆分后可能出现的空片段
    if (!fragment) return null;
    // 普通文本直接返回文本节点
    return fragment;
  }).filter(Boolean);

  // 用span包裹所有元素返回
  return <span>{elements}</span>;
}

3. 适配中文场景的补充说明

如果处理中文文本,因为中文没有英文那样的单词边界\b,需要调整匹配规则:

  • 可以把正则的\b替换为匹配中文标点、空格或字符串首尾的规则,比如(^|[\s\u3000-\u303f\uff00-\uffef])和($|[\s\u3000-\u303f\uff00-\uffef])
  • 或者改用逐个遍历字典词条的方式查找替换(效率稍低,但适配性更强)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:35:04