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>

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

相关推荐
神所夸赞的夏天9 小时前
如何获取多层json数据,存成dictionary,并取最大最小值
java·前端·json
红色的小鳄鱼9 小时前
前端面试js手写
开发语言·前端·javascript
焦糖玛奇朵婷9 小时前
健身房预约小程序开发、设计
java·大数据·服务器·前端·小程序
上海云盾王帅9 小时前
WEB业务如何接入安全防护:从零到一的实战指南
前端·安全
用户059540174469 小时前
AI Agent记忆丢失踩坑实录:这个问题让我排查了3天
前端·css
web行路人9 小时前
前端对Commands(斜杠命令)一些常用
前端·javascript·vue.js·vue
Rhi6379 小时前
第 2 篇|吐槽向:那些年我们配过的环境,这次终于能跑起来了
react.js·github
当时只道寻常9 小时前
从零到一打造企业级全栈后台管理系统 —— 技术选型、工程化实践与深度思考
前端·全栈·前端工程化
竹林8189 小时前
用 ethers.js 连 MetaMask 做钱包登录,我踩了三个坑才搞定跨页面状态同步
前端·javascript
饺子不吃醋9 小时前
深入理解 Vue 3 的 setup(含 Composition API)
前端·vue.js