React实现文字高亮

在React项目开发中,需要实现搜索后高亮显示关键词,特别是当文本包含表情图片和代码块等HTML元素时。通过抽取HTML标签并重新生成高亮字符串,结合`dangerouslySetInnerHTML`解析,成功解决了这个问题。文中还提到了原有实现的bug及改良后的解决方案。
摘要由CSDN通过智能技术生成

在项目开发中遇到一个头疼的问题,就是在搜索数据后渲染的同时把框出来的部分命中搜索关键词经行高亮,如果是普通的字符串高亮很简单,调用_match方法就行了当然,可以直接返回jsx(代码中被注释的部分),但是如图,不是纯文本,里面掺杂中表情的img标签,也有可能是提交的代码块,比如:

dal;jksdajk[闭嘴][闭嘴][大哭][再见][亲亲][示爱][哈欠]dajalkjg <img src=“eeee.png” alt=“图片” />@cp1 @cp2

其中img标签是不允许被破坏的,所以就需要对文本进行抽取其中的html标签部分后在重新生成新的高亮后的字符串或jsx,在react中通过 dangerouslySetInnerHTML经行解析,最终实现效果如下图

在这里插入图片描述

  const _match = (keyword, content) => {
    const reg = new RegExp(keyword.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'), 'ig')

    const splitIconTypes = content.split(reg)
    const match = content.match(reg)
    let matchStr = (match || [])
      .map((_, index) => {
        ret
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值