对接口搜索结果高亮需先转义关键词正则元字符,再构造全局忽略大小写正则;仅对纯文本字段替换并包裹<mark>标签;Vue中v-html仅用于纯文本,含HTML字段需DOM遍历处理;空搜索词需还原原始文本,空格需trim判断,支持scrollIntoView定位。

对接口返回的搜索结果做高亮处理,核心是把关键词插入到匹配文本中并包裹高亮标签(如 <mark> 或带 class 的 <span>),同时确保不破坏原始 HTML 结构、能正确转义正则特殊字符、支持大小写不敏感匹配。
1. 先对关键词做正则转义
用户输入的关键词可能含 .、*、+、? 等正则元字符,直接用于 RegExp 会报错或误匹配。必须先转义:
- 用正则替换所有需转义字符:`keyword.replace(/[\^$*+?.()|[]{}]/g, '\$&')`
- 再构造全局、忽略大小写的正则:`new RegExp(escapedKeyword, 'gi')`
2. 对每条数据的字段做安全替换
不要直接操作 innerHTML 后再用 v-html 渲染(Vue 场景)或 element.innerHTML(原生场景),否则容易 XSS 或打乱原有标签结构。推荐做法:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 只对纯文本字段(如
item.title、item.desc)做替换,避开含 HTML 的字段 - 用
String.prototype.replace()+ 正则,将匹配内容替换成带<mark>的字符串 - 示例:
item.title.replace(regex, '<mark>$</mark>')
3. Vue 中配合 v-html 安全使用
如果后端返回的是纯文本(非富文本),可放心用 v-html 渲染高亮结果;若字段本身含 HTML 标签(如 <p><strong>xxx</strong></p>),需先提取纯文本再高亮,或改用 DOM 遍历方式(如 TreeWalker)精准处理文本节点,避免污染标签结构。
立即学习“Java免费学习笔记(深入)”;
4. 处理边界情况
实际开发中容易忽略但关键的细节:
- 搜索词为空时,要还原原始文本(清除所有
<mark>) - 关键词含空格或连续空白符时,建议用
.trim()再判断是否有效 - 高亮后若需滚动定位,可用
element.querySelector('mark')?.scrollIntoView() - 若用 Fuse.js 等库,优先利用其
matches.indices做精准位置高亮,比正则更稳定

















