
本文介绍一种健壮的 JavaScript 文本高亮方案:基于用户输入,在 列表中精准包裹匹配文本为 标签,支持大小写不敏感、跨 HTML 结构(如 、 内容)的全文本匹配,且严格保留原始大小写与 DOM 结构。
本文介绍一种健壮的 JavaScript 文本高亮方案:基于用户输入,在 `
在实现搜索高亮功能时,直接操作 innerHTML 并依赖正则匹配 HTML 片段(如 >[a-zA-Z]*...)极易出错——它会误判标签边界、忽略嵌套元素内容,且无法处理大小写不一致场景(如搜索 <code>css 但原文是 CSS)。下面提供一套语义安全、可维护性强、覆盖全场景的解决方案。
✅ 核心改进点
-
修复正则逻辑:原正则
>[a-zA-Z]*${val}[a-zA-Z]* 强制要求匹配字母,导致 <code>Sheet(结尾匹配)或Cascading Style Sheets(含空格)失败;改为>[^,即“<code>>后非字符任意长度,再匹配关键词,再接非 <code> 字符直到下一个 <code>”,更准确捕获标签内纯文本区域。 -
实现大小写不敏感匹配:使用
RegExp(..., 'gi')中的i标志,并在replace()中通过回调函数动态提取原始匹配片段,确保<mark></mark>中包裹的是原文本大小写(如搜css→ 高亮<mark>CSS</mark>)。 -
优化清除逻辑:用单次正则
//g替换所有<mark></mark>和
replaceAll() 更高效、更安全。✅ 完整可运行代码
<input type="text" name="search" placeholder="搜索关键词...">
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











