实现模糊搜索结果关键词高亮

2,569 阅读1分钟

实现模糊搜索结果关键词高亮

    // 搜索加黑
    const handleSearch = (text, keywords = '') => {
      // 校验类型
      if (!isString(text) || !isString(keywords)) {
        throw new Error('text or keywords should be string');
      }
      let res = '';
      const reg = new RegExp(keywords, 'ig');
      // 校验text是否包含keywords
      if (!reg.test(text)) return text;
    
      // 将text 拆分成非keywords和keywords组成的数组
      const splitArr = text.split(reg);
      const arr = text.match(reg);
    
      // 将关键字高亮并拼成字符串
      for (let i = 0; i < splitArr.length - 1; i++) {
        res += `<span>${splitArr[i]}</span><span style="background:#a1d2f0">${
          arr[i]
        }</span>`;
      }
      res += `<span>${splitArr[splitArr.length - 1] || ''}</span>`;
    
      return res;
    };
    
    // 校验是否是字符串类型
    const isString = str =>
      Object.prototype.toString.call(str) === '[object String]';
    
    export default handleSearch;