当前位置:首页 > React

react实现单词高亮

2026-01-26 20:05:06React

实现单词高亮的基本思路

在React中实现单词高亮的核心逻辑是通过字符串替换或正则表达式匹配目标单词,将其包裹在带有高亮样式的HTML元素(如<span>)中。需要处理动态输入、大小写敏感等场景。

使用字符串替换方法

将目标文本按关键词拆分后重新组合,为匹配部分添加高亮样式。以下是一个基础实现示例:

react实现单词高亮

function HighlightText({ text, keyword }) {
  if (!keyword) return text;

  const parts = text.split(new RegExp(`(${keyword})`, 'gi'));
  return (
    <>
      {parts.map((part, i) =>
        part.toLowerCase() === keyword.toLowerCase() ? (
          <span key={i} style={{ backgroundColor: 'yellow' }}>
            {part}
          </span>
        ) : (
          part
        )
      )}
    </>
  );
}

正则表达式匹配复杂场景

需要处理特殊字符或多单词匹配时,需对关键词进行转义并优化正则:

function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

function HighlightText({ text, keywords }) {
  if (!keywords.length) return text;

  const regex = new RegExp(
    `(${keywords.map(escapeRegExp).join('|')})`,
    'gi'
  );
  const parts = text.split(regex);

  return (
    <>
      {parts.map((part, i) =>
        keywords.some(k => 
          k.toLowerCase() === part.toLowerCase()
        ) ? (
          <span key={i} className="highlight">{part}</span>
        ) : (
          part
        )
      )}
    </>
  );
}

样式与性能优化

通过CSS类名控制高亮样式更易于维护:

react实现单词高亮

.highlight {
  background-color: #ffeb3b;
  font-weight: bold;
  padding: 0 2px;
}

对于长文本或高频更新场景,考虑使用useMemo优化:

const highlightedText = useMemo(() => {
  // 高亮处理逻辑
}, [text, keywords]);

支持富文本与安全处理

若文本包含HTML标签,需使用DOMPurify等库防止XSS攻击:

import DOMPurify from 'dompurify';

function sanitizeAndHighlight(text, keyword) {
  const sanitized = DOMPurify.sanitize(text);
  // 高亮处理逻辑
}

完整组件示例

import React, { useMemo } from 'react';
import DOMPurify from 'dompurify';

function HighlightText({ text, keywords = [], caseSensitive = false }) {
  const highlighted = useMemo(() => {
    if (!keywords.length) return text;

    const flags = caseSensitive ? 'g' : 'gi';
    const pattern = `(${keywords.map(escapeRegExp).join('|')})`;
    const regex = new RegExp(pattern, flags);

    return DOMPurify.sanitize(text).split(regex).map((part, i) => {
      const isMatch = keywords.some(k => 
        caseSensitive 
          ? k === part 
          : k.toLowerCase() === part.toLowerCase()
      );
      return isMatch ? (
        <span key={i} className="highlight">{part}</span>
      ) : part;
    });
  }, [text, keywords, caseSensitive]);

  return <>{highlighted}</>;
}

标签: 单词react
分享给朋友:

相关文章

vue实现单词反转

vue实现单词反转

实现单词反转的方法 在Vue中实现单词反转可以通过多种方式完成,以下是几种常见的方法: 方法一:使用计算属性 在Vue组件中定义一个计算属性,利用JavaScript的字符串和数组方法实现反转…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gree…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在 s…

react如何运行

react如何运行

运行React项目的步骤 安装Node.js 确保系统已安装Node.js(建议版本12以上),可从官网下载并安装。Node.js自带npm包管理器,用于后续依赖安装。 创建React项目 使用官…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

如何创建react

如何创建react

创建React项目的步骤 使用Create React App工具快速搭建React项目。确保已安装Node.js(版本需≥14.0.0)和npm(版本需≥5.6)。 打开终端或命令行工具,运行以下…