美文网首页
搜索高亮关键词并获取上下文

搜索高亮关键词并获取上下文

作者: __杉 | 来源:发表于2018-12-21 16:02 被阅读0次
    • 搜索文章时高亮关键词,并截取关键词所在位置的上下文。
    let keywords = []  // 多关键词
    let text = '...' // 正文
    let regStr = '' // 正则表达式字符串
    keywords.forEach(item=>{
      if (item !== '') {
              if (regStr ) ref+= '|'
              // ?非贪婪匹配:正则表达式碰到到第一个匹配到的字符串就
              regStr += `(\\S*?)(${item})([\\s\\S]{0,60})`
              // \b匹配一个单词的边界,也就是指单词和空格间的位置
              // regStr += `(\\b\\S*?)(${item})([\\s\\S]{0,60})`
            }
    })
    let reg = RegExp(regStr,'gm') // 正则表达式
    // 找到一个或多个正则表达式的匹配,match() 方法将执行全局检索,找到所有匹配子字符串,返回一个数组
    let cont = item.content.match(reg) 
    // 高亮后的文本
    let content = ''
    // 统计字数
    let len = 0
    
    // 循环匹配到的数组,并对相关数据做处理
    if (cont) {
      // 高亮的关键词的前面的文本
      let first = ''
      cont.forEach((str, index) => {
        if (index && str) {
          // console.log(str)
          // 循环与正则表达式的子表达式匹配的文本
          if (index % 3 === 1) {
            // 匹配的第一个子表达式,即高亮的关键词的前面的文本
            first = str
          } else {
            len += str.length
            content += str.replace(regT, ($1) => {
              return `<span class="mclr">${$1}</span>`
            })
          }
        }
      })
      // 取多少长度的匹配字符串前的文本,移动端控制显示文本的长度
      if (first) {
        if (len < 20) {
          content = (first.substr(0, 70) +
            (first.length <= 70 ? '' : '...')) +
            content
        } else if (len < 40) {
          content = (first.substr(0, 50) +
            (first.length <= 50 ? '' : '...')) +
            content
        } else {
          content = (first.substr(0, 15) +
            (first.length <= 15 ? '' : '...')) +
            content
        }
      }
    }
    

    相关文章

      网友评论

          本文标题:搜索高亮关键词并获取上下文

          本文链接:https://www.haomeiwen.com/subject/cuzmkqtx.html