react经验7:高亮关键字

预期效果:

实现原理

将需要高亮的关键词做成正则表达式

js 复制代码
new RegExp(`(${word})`, "gi")

使用上述正则表达式切割目标字符串

js 复制代码
origin.split(new RegExp(`(${word})`, "gi"))

切割结果会包含正则匹配到的词

过滤掉空字符,并对关键词包裹一层标签,以设置其样式

ts 复制代码
/**处理高亮词
*@param origin 目标字符串
*@param word 关键词
*@returns {ReactNode[]}
*/
function highlightWord(origin: string, word: string) {
    if (!word) {
        return [origin]
    }
    const sps = origin.split(new RegExp(`(${word})`, "gi"))
    //排除空字符,并对关键词包裹标签
    return sps.filter(c => c).map(c => {
        if (c.toLowerCase() === word.toLowerCase()) {
            return <mark>{c}</mark>
        }
        return c
    })
}

最后将切割处理后的结果渲染输出

js 复制代码
let title=highlightWord('12345','12')
js 复制代码
<label>
	{title.map(d=>d)}
</label>

上述代码实际会生成这个

html 复制代码
<label><mark>12</mark>345</label>

关键词被包裹了标签,此时就可以任意设定高亮样式了

相关推荐
携欢6 分钟前
PortSwigger靶场之Exploiting server-side parameter pollution in a REST URL通关秘籍
前端·javascript·安全
鹏多多19 分钟前
今天你就是VS Code之神!15个隐藏技巧让代码效率翻倍
前端·程序员·visual studio code
linksinke28 分钟前
html案例:制作一个图片水印生成器,防止复印件被滥用
开发语言·前端·程序人生·html
寒月霜华28 分钟前
JavaWeb-html、css-网页正文制作
前端·css·html
执沐32 分钟前
HTML实现流星雨
前端·html
*濒危物种*33 分钟前
HTML标签语法,基本框架
前端·css·html
软件技术NINI34 分钟前
html css js网页制作成品——HTML+CSS+js早餐铺网页设计(4页)附源码
javascript·css·html
IT_陈寒44 分钟前
Vue3性能优化实战:这7个技巧让我的应用提速50%,尤雨溪都点赞!
前端·人工智能·后端
艾小码1 小时前
前端必备:JS数组与对象完全指南,看完秒变数据处理高手!
前端·javascript
weixin-a153003083162 小时前
vue疑难解答
前端·javascript·vue.js