#搜索内容高亮显示
(commentStr, maxLen = 28, keywords) => {
if (!commentStr) {
return ''
}
// console.log(keywords,'keywords==')
let commentStrLen = commentStr.length
let keywordLen = keywords.length
let reg = new RegExp(keywords, 'i')
// 备注信息低于最大展示字符长度
if (commentStrLen <= maxLen) {
return commentStr.replace(reg, (word) => {
return '<span class="search-keywords">' + word + '</span>'
})
} else { // 备注信息高于最大展示字符长度
const leftLen = commentStr.toUpperCase().indexOf(keywords.toUpperCase())
const rightLen = commentStrLen - leftLen - keywordLen
if (leftLen + keywords.length <= maxLen) { // 右省略
return commentStr.slice(0, maxLen).replace(reg, (word) => {
return '<span class="search-keywords">' + word + '</span>'
}) + '...'
} else if (keywords.length + rightLen <= maxLen){ // 左省略
return '...' + commentStr.slice(-maxLen, commentStrLen).replace(reg, (word) => {
return '<span class="search-keywords">' + word + '</span>'
})
} else { // 中间省略
if (keywordLen >= maxLen) {
return '...' + '<span class="search-keywords">' + keywords.slice(0, maxLen) + '</span>' + '...'
} else {
const leftStrLen = Math.floor((maxLen - keywordLen) / 2)
const rightStrLen = maxLen - keywordLen - leftStrLen
return '...' + commentStr.slice(leftLen - leftStrLen, leftLen) + '<span class="search-keywords">' + keywords + '</span>' + commentStr.slice(leftLen + keywordLen, rightStrLen + leftLen + keywordLen) + '...'
}
}
}
}