根据关键词词组对内容进行检索,将完全匹配或者部分匹配度字体进行高亮显示
需求
试题查询,根据关键词对试题内容进行检索,将完全匹配或者部分匹配单词进行高亮显示
提示
搜索的内容中文或者英文、Mathjax
实现思路
对关键词进行拆分,根据需求这里是后端处理后返回,
e g: 特征角
--> 特征
,特征角
,特征
返回的字符数组,我们肯定是根据长度从长到短去进行正则替换
不过要对传入的string进行过滤,不如HTML实体,Latex公式,HTML标签等
最好封装成一个stringMark函数后续可以多次使用
拆分
stringMark(text = '', wordRegex: any, opt: any = {}) {
if (!wordRegex) return text;
// 初始化配置对象
opt = { ...this.config, ...opt };
///拆分正则
// this.splitRegex /(<[^>]+>|\$\$.+?\$\$|\$.+?\$|&[a-zA-Z]{2,8};)/gim
const splitRegex = opt.splitRegex || this.splitRegex;
const strArr = text.split(splitRegex);
const newArr: string[] = [];
strArr.forEach((str) => {
if (!str) return;
// 检查str是否是过滤项
if (includesFilterRegex(str)) {
newArr.push(str);
} else {
str = str.replace(
createWordRegex(wordRegex),
`<${opt.tag} class="${opt.className}">$&</${opt.tag}>`
);
newArr.push(str);
}
});
const newText = newArr.join('');
return newText;
}