You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React项目中如何去除TVmaze API返回summary的HTML标签仅显示文本

问题描述

从TVmaze API获取的数据中,summary字段的文本被<p>等HTML标签包裹,需要在React组件渲染时仅展示纯文本内容,而非HTML标签。现有Home组件代码如下:

const Home = () => {    
  const [movies, setMovies] = useState([]);  

  useEffect(() => {
    const fetchData = async () => {
      try {
        const { data } = await axios.get("https://api.tvmaze.com/search/shows?q=all");
        setMovies(data);
        console.log(data);
      } catch {}
    };
    fetchData();
  }, []);

  return (
    <div className="movieCards-container ">
      <h1 className="heading"> Recommended Movies</h1>
      <div className=" container-custom d-flex align-items-center justify-content-center pb-5 ">
        <div className="row justify-content-center">
          {movies.map((item, index) => {
            return (
              <div className=" col-12 col-md-6 col-lg-4 d-flex align-items-center justify-content-center ">
                <MovieCard 
                  key={item.show.id}
                  id={item.show.id} 
                  name={item.show.name} 
                  image={item.show.image.original}
                  summary={item.show.summary}
                  showday={item.show.schedule.days}
                  showtime={item.show.schedule.time}
                />
              </div>
            );
          })}
        </div>
      </div>
    </div>
  );
};
解决方案

以下几种方法可以实现提取HTML中的纯文本:

方法1:正则表达式移除HTML标签

实现一个简单的工具函数,用正则匹配并移除所有HTML标签:

// 工具函数:移除所有HTML标签
const stripHtmlTags = (html) => {
  if (!html) return '';
  return html.replace(/<[^>]*>/g, '');
};

在组件中调用该函数处理summary:

<MovieCard 
  // 其他props不变
  summary={stripHtmlTags(item.show.summary)}
/>

该方法轻量高效,适合处理结构简单的HTML内容,但若遇到特殊嵌套标签或转义字符可能存在局限性。

方法2:使用浏览器原生DOMParser解析

利用浏览器的DOMParser API解析HTML,提取纯文本内容,这种方法更可靠,能处理复杂HTML结构:

// 工具函数:解析HTML并提取纯文本
const stripHtmlTags = (html) => {
  if (!html) return '';
  const parser = new DOMParser();
  const doc = parser.parseFromString(html, 'text/html');
  return doc.body.textContent || '';
};

同样在组件中调用该函数处理summary即可。注意:如果你的项目涉及服务器端渲染(SSR),需要额外引入jsdom等库模拟浏览器环境。

方法3:使用第三方库(可选)

若需要更灵活的HTML处理,可使用html-react-parser库,它能将HTML转换为React元素,也可提取纯文本:

首先安装依赖:

npm install html-react-parser

然后编写工具函数:

import parse from 'html-react-parser';

const getPlainText = (html) => {
  if (!html) return '';
  return parse(html, {
    replace: ({ children }) => children.join('')
  });
};

在组件中调用getPlainText处理summary即可。

内容的提问来源于stack exchange,提问作者Jayita Deb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:55:37