对文章进行搜索关键字过滤,并显示高亮的javascript实现方法之一

42次阅读

共计 1258 个字符,预计需要花费 4 分钟才能阅读完成。

在不考虑关键字是特殊字符的情况下:
warpTag (content, keyword, tagName) {
if (content === ‘No results’) {
return content
}
const a = content.toLowerCase()
const b = keyword.toLowerCase()
const indexof = a.indexOf(b)
const c = indexof > -1 ? content.substr(a.indexOf(b), keyword.length) : ”
const val = `<${tagName}>${c}</${tagName}>`
const regS = new RegExp(keyword, ‘gi’)
return content.replace(regS, val)
}
调用的时候 warpTag(‘ 要检索的内容 ’,’ 检索的关键字 ’,’ 给内容中的关键字加上的有特殊标记的标签名 ’)
2. 如果关键字允许是特殊字符的情况下,就要做区别处理,因为有些特殊字符在正则中有特殊含义(例如:^\*+? 等,具体可参考正则表达式手册):
warpTag (content, keyword, tagName) {
if (content === ”) {
return content
}
const a = content.toLowerCase()
const b = keyword.toLowerCase()
const indexof = a.indexOf(b)
const c = indexof > -1 ? content.substr(a.indexOf(b), keyword.length) : ”
const val = `<${tagName} class=’keywords’>${c}</${tagName}>`
let characterReg = /^.*[\\!~@#$%^&*(_)+\-=`,./<>?;’:”|[\]{}].*$/
let regS
if (characterReg.test(keyword)) {
if (keyword.length === 1) {
regS = new RegExp(‘\\’ + keyword, ‘gi’)
} else {
let keywordNew = ”
for (let i = 0; i < keyword.length; i++) {
keywordNew += i < keyword.length – 1 ? keyword.substr(i, 1) + ‘\\’ : keyword.substr(i, 1)
}
keyword = keywordNew
}
regS = new RegExp(‘\\’ + keyword, ‘gi’)
} else {
regS = new RegExp(keyword, ‘gi’)
}
return content.replace(regS, val)
}
使用方法同上:warpTag(‘ 要检索的内容 ’,’ 检索的关键字 ’,’ 给内容中的关键字加上的有特殊标记的标签名 ’)。本篇文章主要用来记载工作项目中遇到的,本人觉得有必要记下来的知识点,方便在以后遇到时可以直接使用,也给遇到同样问题的其他人提供一个思路。

正文完
 0