news 2026/4/18 4:17:11

React JSX和正则表达式的神奇组合

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
React JSX和正则表达式的神奇组合

前端开发中非常常见的场景,当用户在搜索框输入关键词后,页面中匹配到关键词的文本,需要高亮展示。举个最直观的例子:

原始文本:'今天的天气不错'

用户搜索:'天'

很多人第一反应是:对原始文本进行子串比对,找到所有匹配关键词的位置,然后将文本拆分成多个独立的片段,再给匹配到的片段包裹上带高亮样式的容器。这种方法确实能实现效果,但过程非常繁琐。

既然是“处理字符串匹配”,那自然会想到正则表达式。我们完全可以用极简的代码实现这个需求。

不绕弯子,直接上最终实现代码(React场景):

// 核心代码,仅1行JSX逻辑 text.split(new RegExp(`(${searchKey})`, 'gi')).map((str, i) => i % 2 ? <span key={i} style={{ background: 'yellow' }}>{str}</span> : str )

正则表达式与split方法的结合

new RegExp(`(${searchKey})`, 'gi')

这里有两个关键要点:

  • 分组符 ():这是整个实现的“灵魂”。

    • 正常情况下,split方法会根据匹配到的内容拆分字符串,并丢弃匹配到的子串(比如用“天”拆分“今天的天气不错”,会得到["今", "的", "气不错"])。

    • 但加上分组符后,split会将匹配到的子串也保留在拆分后的数组中。

    • 所有匹配到的关键词(“天”)都在奇数索引位置(索引1、3),而其他非匹配文本都在偶数索引位置(索引0、2、4)。

      ["今", "天", "的", "天", "气不错"]
  • 修饰符 gi:g表示“全局匹配”,i表示“忽略大小写”。

JSX与map方法的结合

实现高亮渲染,这里JSX的特性功不可没——它可以和原生JavaScript代码无缝混写,我们不需要额外的模板语法。JSX的便捷之处,我在这篇文章中已有介绍:Vue和React之争

最后,正则表达式中的分组符()还有很多实用用途,比如捕获匹配内容、实现分组替换等,以后有机会我再专门整理一篇文章,详细讲解正则分组的各种用法。


作者简介:从事 Web 前后端开发多年。一直相信“技术应该被说人话”,坚持输出实用易懂的干货内容。闲暇写些随笔,记录行业观察与生活感悟。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 4:14:50

题解:洛谷 P1554 梦中的统计

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…

作者头像 李华
网站建设 2026/4/18 4:11:25

Tutorial: 从泊松到霍克斯——自激励过程的核心思想与应用

1. 从泊松过程说起&#xff1a;随机事件的理想模型 泊松过程就像是一个完全随机的宇宙——每个事件的发生都独立于其他事件&#xff0c;就像天空中随机闪烁的星星。想象你坐在咖啡馆里记录顾客到达的时间&#xff0c;如果顾客们彼此完全不认识&#xff0c;每个人的到来都不受前…

作者头像 李华
网站建设 2026/4/18 4:10:40

DDColor黑白照片修复:ComfyUI图形化操作,小白友好快速入门

DDColor黑白照片修复&#xff1a;ComfyUI图形化操作&#xff0c;小白友好快速入门 你是否曾经翻出过家里的黑白老照片&#xff0c;想要恢复它们原本的色彩却无从下手&#xff1f;现在&#xff0c;借助DDColor和ComfyUI的强大组合&#xff0c;即使没有任何技术背景&#xff0c;…

作者头像 李华
网站建设 2026/4/18 4:07:46

Java全栈面试进阶宝典:2026金三银四必备!

大家都知道&#xff0c;现在的Java面试是越来越难了&#xff01;主要原因无非是两个&#xff1a;Java相比于其他语言就业面更宽&#xff0c;不管是在家待业的、对自己现在工作不满意的、大学选错专业的、缺钱的、想自己学的等等这些人绝大部分都是选择了去学习Java&#xff01;…

作者头像 李华
网站建设 2026/4/18 4:07:44

如何快速掌握Survey:Go交互式命令行库的核心架构解析

如何快速掌握Survey&#xff1a;Go交互式命令行库的核心架构解析 【免费下载链接】survey A golang library for building interactive and accessible prompts with full support for windows and posix terminals. 项目地址: https://gitcode.com/gh_mirrors/su/survey …

作者头像 李华
网站建设 2026/4/18 4:07:22

5个Statistical Rethinking 2023实战案例:从理论到代码实现

5个Statistical Rethinking 2023实战案例&#xff1a;从理论到代码实现 【免费下载链接】stat_rethinking_2023 Statistical Rethinking Course for Jan-Mar 2023 项目地址: https://gitcode.com/gh_mirrors/st/stat_rethinking_2023 Statistical Rethinking 2023课程提…

作者头像 李华