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

如何隐藏PrismJS Markdown解析器输出中的Markdown标点符号?

解决PrismJS解析Markdown保留标记符号的问题

PrismJS自带的Markdown语法支持本质是语法高亮,不是用来把Markdown渲染成纯HTML的,所以它会保留*、**这些标记并给它们加高亮样式,这是预期行为。要实现你要的「只输出HTML标签、去掉原Markdown标记」的效果,有两种可行方案:

方案一:先渲染Markdown为HTML,再用Prism高亮代码块

这是更合理的分工方式——用专门的Markdown解析器处理格式渲染,让Prism专注于代码高亮:

  1. 引入一个轻量的Markdown解析库(比如marked或markdown-it)
  2. 先把你的Markdown内容解析成纯HTML
  3. 再调用Prism的方法高亮HTML中的代码块

示例代码:

// 假设你的Markdown内容存在这里
const mdText = `*Italic*
**Bold on
multiple lines**
\`\`\`javascript
console.log('Prism + Markdown');
\`\`\``;

// 第一步:用marked解析Markdown为HTML
const renderedHtml = marked.parse(mdText);
// 把解析后的HTML插入页面
document.querySelector('.blog-content').innerHTML = renderedHtml;

// 第二步:高亮页面中的代码块
Prism.highlightAll();

这样处理后,Markdown的格式会被正确转换成<em>、<strong>等标签,代码块也会被Prism正常高亮,完全符合你的需求。

方案二:修改Prism的Markdown语言规则

如果你一定要用Prism来处理Markdown,需要修改它的Markdown语法定义,让渲染时去掉原标记符号:
找到Prism的prism-markdown.js文件,定位到处理斜体、粗体等规则的部分,修改替换逻辑。比如原斜体规则可能是这样的:

Prism.languages.markdown = {
  // ...其他规则
  'italic': /(?:^|[^*])(\*)(?!\1)([^*\n]+)(\1)/,
  // ...其他规则
};

你需要把它改成自定义的替换逻辑,比如用Prism的replace方法,只保留包裹的内容和HTML标签:

Prism.languages.markdown['italic'] = {
  pattern: /(?:^|[^*])(\*)(?!\1)([^*\n]+)(\1)/,
  replace: (match) => {
    const content = match.split(/\*/)[1];
    return `<em>${content}</em>`;
  }
};

同理修改粗体等其他规则,但这种方法需要维护自定义的Prism语言文件,不如方案一省心。

内容的提问来源于stack exchange,提问作者Prateek Verma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:44