公司的搜索业务需要关键字高亮功能,但需要兼容小程序和h5功能
网上搜了一些都是利用
replace
替换来实现的,但这样不能兼容小程序
export function hightLight (keyWord: string, suggtion: string) {
// 使用 regexp 构造函数,因为这里要匹配的是一个变量
const reg = new RegExp(keyWord, 'ig')
const newSrt = String(suggtion).replace(reg, function (p) {
return '<span style={color: red}>' + p + '</span>'
})
return newSrt
}
自己有找到了一些可以兼容小程序和h5的写法 就是把关键字转换成数组,偶数是高亮,奇数是正常字
export const filterHighlight = (str, highlight) => {
//过滤高亮文字 字符串 转成数组
let reg = new RegExp('(['+highlight+'])', 'g');
let result = {};
let currentIndex = 0;
let returnData = [];
while ((result = reg.exec(str))) {
returnData.push(str.slice(currentIndex, result.index));
returnData.push(result[1]);
currentIndex = result.index + result[0].length;
}
if (str.length > currentIndex) {
returnData.push(str.slice(currentIndex, str.length));
}
return returnData
}
<template>
<text>
<text
:class="index % 2 !== 0 ? 'hightLight' : ''"
v-for="(item, index) of hightLight"
:key="index"
>{{ item }}</text
>
</text>
</template>
<script>
import { filterHighlight } from "@/utils/index.js";
export default {
props: {
text: {
type: String,
default: "",
},
searchValue: {
type: String,
default: "",
},
},
data() {
return {};
},
computed:{
hightLight:function(){
return filterHighlight(this.text, this.searchValue)
}
}
};
</script>
<style lang="scss" scoped>
.hightLight {
color: #1551e9;
}
</style>