HTML字符串中高亮关键字

501 阅读1分钟

答案 HTML字符串中高亮关键字 说明 假设你在实现一个搜索建议。

当输入关键词的时候,你需要在建议中高亮关键词,你如何做到?

简单起见,请实现一个函数highlightKeywords(html:string, keywords: string[]),这个函数接受一段HTML字符串,然后用<em> 高亮关键词。

这是一个例子。

highlightKeywords(
  'Hello FrontEnd Lovers', 
  ['Hello', 'Front', 'JavaScript']
)
// '<em>Hello</em> <em>Front</em>End Lovers'

注意你需要使用最少的<em>,避免重复添加。

highlightKeywords(
  'Hello FrontEnd Lovers', 
  ['Front', 'End', 'JavaScript']
)
// 'Hello <em>FrontEnd</em> Lovers'

highlightKeywords(
  'Hello FrontEnd Lovers', 
  ['Front', 'FrontEnd', 'JavaScript']
)
// 'Hello <em>FrontEnd</em> Lovers'

注意空格需要被排除在外。

ps: 又是被题目整懵的一天,这道题需要注意的就是下面这个案例

highlightKeywords(
  'Hello FrontEnd Lovers', 
  ['Front', 'End', 'JavaScript']
)
// 'Hello <em>FrontEnd</em> Lovers'

答案

//摘自评论区,我自己没写出来
function highlightKeywords(html, keywords) {
  const regExp = new RegExp(keywords.join('|'), 'ig');
  return html.split(' ').map(word => {\
      //如果keywords里包含整个单词,直接返回
    if (keywords.includes(word)) return `<em>${word}</em>`;
    //否则,要判段是否一个单词里添加了两个em标签
    return word.replace(regExp, (w) => `<em>${w}</em>`).replace('</em><em>', '');
  }).join(' ')
};