以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - JavaScript 代码题
55. HTML字符串中高亮关键字
思路:
- 遍历关键词数组,根据每个关键词生成正则表达式,并用
replace
方法将关键词替换成带有<em>
标签的关键词。 - 通过正则表达式可以实现全局替换并且忽略大小写。
- 为了避免重复添加
<em>
标签,可以优先替换更长的关键词,如果有冲突,则替换成包含更多关键词的标签。
代码实现如下:
function highlightKeywords(html, keywords) { // 根据字符串长度排序,长度相同则按顺序排 keywords.sort((a, b) => b.length - a.length || keywords.indexOf(a) - keywords.indexOf(b)); // 遍历关键词,替换HTML中的关键词 for (let keyword of keywords) { let regex = new RegExp(keyword, 'gi'); let replaceStr = `<em>${keyword}</em>`; html = html.replace(regex, replaceStr); } return html;}
测试:
console.log(highlightKeywords('Hello FrontEnd Lovers', ['Hello', 'Front', 'JavaScript']));// '<em>Hello</em> <em>Front</em>End Lovers'console.log(highlightKeywords('Hello FrontEnd Lovers', ['Front', 'End', 'JavaScript']));// 'Hello <em>FrontEnd</em> Lovers'console.log(highlightKeywords('Hello FrontEnd Lovers', ['Front', 'FrontEnd', 'JavaScript']));// 'Hello <em>FrontEnd</em> Lovers'
注意原始字符串不会被修改,因为String.replace
方法返回值是新的字符串。