当前位置: 首页 > news >正文

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 前后端开发多年。一直相信“技术应该被说人话”,坚持输出实用易懂的干货内容。闲暇写些随笔,记录行业观察与生活感悟。

http://www.jsqmd.com/news/658919/

相关文章:

  • 颗粒包装机源头厂家2026年3月推荐,品质与口碑并存,半自动大包机/核桃包装机/方便面包装机,包装机供应商哪家好 - 品牌推荐师
  • 终极指南:PerceptualSimilarity在计算机视觉中的10大应用场景
  • 3步配置HideMockLocation:解决Android应用位置检测的终极方案
  • 如何解决TranslucentTB安装失败0x80073D05错误:完整指南
  • MyBatis-Plus Samples完整项目实战:Deluxe示例深度剖析
  • 如何快速掌握Gumbo-Parser:HTML5解析库的完整入门指南
  • Firesheep开发者指南:如何编写自定义会话劫持处理器
  • pg详解及crush规则生成
  • ROCm rocr-libhsakmt性能跟踪与分析系列10-1:概述
  • package-skeleton-laravel服务提供者详解:Laravel包开发的核心
  • 终极Transformer Debugger使用指南:从神经元激活到电路发现的完整路径
  • CSCore编解码器深度解析:支持MP3、FLAC、AAC等10+音频格式
  • Headscale-UI架构深度解析:SvelteKit静态站点设计原理
  • ViGEmBus虚拟手柄驱动:Windows游戏控制的终极解决方案
  • 终极揭秘:SAM-HQ轻量级版本如何实现41.2 FPS实时高质量分割技术
  • 一站式解决Windows应用兼容性:Visual C++运行库全版本智能安装指南
  • EasyTransaction可靠消息机制:保证消息最终一致性的完整指南
  • StructBERT相似度镜像免配置方案:支持离线环境无网络部署
  • DC/OS高可用性设计:Master节点故障恢复机制
  • python语法练习------题目 2:继承特性
  • Evaluate 核心组件详解:Metrics、Measurements 和 Comparisons
  • layui table单元格编辑 layui表格如何实现可编辑
  • 终极PSReadLine编辑指南:Emacs与Vi模式深度对比及高效切换技巧
  • 如何快速上手Reko:5分钟学会二进制文件反编译
  • 超越默认配置:手把手教你将自定义算法集成到MoveIt!与OMPL
  • 大规模HTML解析任务分发:gumbo-parser与ZooKeeper的完美结合指南
  • 3个关键步骤解决FanControl风扇控制问题:AMD显卡用户的完整指南
  • 嵌入式开发法律风险防控与知识产权保护实战指南
  • Polyglot词向量应用指南:137种语言的语义相似度计算
  • Qwen3-Embedding-4B部署实录:CentOS系统环境配置避坑指南