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

如何使用正则将被HTML包裹的Markdown代码块转为标准HTML代码块?

优化被<p>包裹的Markdown代码块转换方案

你可以通过优化正则表达式+String.replace函数式替换的方式,替代手动遍历的实现,代码更简洁优雅:

核心实现代码(兼容Google Apps Script)

function convertWrappedCodeBlocks(inputText) {
  // 正则匹配:捕获语言标识 + 中间所有被<p>包裹的代码行
  const codeBlockRegex = /<p>```(\w*)<\/p>([\s\S]*?)<p>```<\/p>/g;
  
  return inputText.replace(codeBlockRegex, function(match, lang, wrappedCode) {
    // 清理代码内容:去掉首尾的<p>/</p>,将段落分隔符替换为换行
    const cleanCode = wrappedCode
      .replace(/^<p>|<\/p>$/g, '')
      .replace(/<\/p><p>/g, '\n');
    
    // 生成标准HTML代码块
    return `<pre><code language="${lang}">${cleanCode}</code></pre>`;
  });
}

// 测试示例
const testInput = '<p>```python</p><p>def fn():</p><p> pass</p><p>```</p>';
console.log(convertWrappedCodeBlocks(testInput));
// 输出:<pre><code language="python">def fn():\n pass</code></pre>

关键优化点

  1. 正则表达式优化:

    • 用([\s\S]*?)非贪婪匹配任意字符(包括换行),解决原正则只能捕获单行代码的问题,完整覆盖所有被<p>包裹的代码行
    • (\w*)精准捕获代码块的语言标识(如python、javascript)
  2. 函数式替换:

    • 利用String.replace的回调函数特性,直接对每个匹配到的代码块进行处理,无需手动维护索引和循环替换,逻辑更清晰

可选增强:HTML特殊字符转义

如果代码中包含<、>、&等HTML特殊字符,建议添加转义逻辑避免页面渲染异常:

function escapeHtml(str) {
  return str
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;');
}

// 在生成代码块时替换为:
return `<pre><code language="${lang}">${escapeHtml(cleanCode)}</code></pre>`;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:35:59