实现搜索关键字匹配高亮

实现代码:

<view>
  <view v-for="(arr,index) in searchResult" :key="index">
    <view class="title">{{index=='user'?'用户':'群组'}}</view>
    <view class="item" v-for="item in arr" :key="item.id">
      <image :src="item.avatar" mode="aspectFill"></image>
      <text class="nickName" v-html="highlight(item.nickName)"></text>
      <view :class="item.isHave?'item-btn':'item-btn1'" @click="handleAdd(item.isHave,item.isGroup)">
        {{item.isHave?'发消息':item.isGroup?'加群组':'加好友'}}
      </view>
    </view>
  </view>
</view>
<script>
  import datas from '../../commons/js/datas';
  export default {
    data() {
      return {
        nickName: '',
        searchResult: {}
      };
    },
    onLoad() {
      this.search()
    },
    methods: {
      // 点击取消按钮
      goBack() {
        uni.navigateBack()
      },
      search() {
        this.searchResult = datas.searchResult()
      },
      handleChange() {},
      // 文字的高亮匹配
      highlight(text) {
        const regex = new RegExp(`[${this.nickName}]`, 'gi');
        const highlightedText = text.replace(regex, match => {
          return `<text style="color: #4AAAFF;">${match}</text>`;
        });
        return highlightedText;
      }    
    }
  }
</script>

高亮函数解析:

  1. highlight(text):这是一个函数的定义,接收一个参数 text,表示待处理的文本。

  2. const regex = new RegExp([${this.nickName}], 'gi');

    • 这一行创建了一个正则表达式对象 regex,用于匹配 this.nickName 中的任意字符。
    • 使用了模板字符串,其中 this.nickName 可能是一个字符串,表达式 [${this.nickName}] 会将 this.nickName 中的字符转换为一个字符集,表示匹配其中任意一个字符。
    • 'gi' 是正则表达式的修饰符,其中 g 表示全局匹配,i 表示不区分大小写。
  3. const highlightedText = text.replace(regex, match => { return <text style="color: #4AAAFF;">${match}</text>; });

    • 这一行使用 text.replace() 方法将文本中匹配到的部分进行替换。
    • regex 是之前定义的正则表达式对象,用于匹配文本中的内容。
    • match 是每次匹配到的子串,在这里表示与 this.nickName 中的字符匹配到的部分。
    • 替换的内容是 <text style="color: #4AAAFF;">${match}</text>,即将匹配到的部分用 <text> 标签包裹,并设置样式为蓝色。
  4. return highlightedText;:返回处理后的文本,即高亮处理后的结果。

实现效果:

欢迎大家提供更好的方法来实现此功能

  • 25
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值