React实现文字高亮

在项目开发中遇到一个头疼的问题,就是在搜索数据后渲染的同时把框出来的部分命中搜索关键词经行高亮,如果是普通的字符串高亮很简单,调用_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) => {
        return `${
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值