📝 Markdown实时预览

广告位 - 顶部 (728×90)

免费在线Markdown实时预览编辑器,支持GFM(GitHub Flavored Markdown)语法。实时渲染标题、列表、代码块、表格、图片链接等。支持一键复制HTML和导出Markdown文件。

输入Markdown实时预览...

广告位 - 中部 (728×90)

常见问题

支持哪些Markdown语法?

本工具支持GFM(GitHub Flavored Markdown)语法,包括标题(#)、列表(-)、代码块(\`\`\`)、表格、图片、链接、加粗、斜体、删除线、引用块、任务列表等。

可以导出为HTML吗?

可以。你可以在输入Markdown后,点击'复制HTML'按钮将渲染后的HTML代码复制到剪贴板。也可以导出为Markdown文件或HTML文件。

代码支持语法高亮吗?

支持。代码块使用\`\`\`language标记时,会自动应用基础语法高亮。支持JavaScript、Python、HTML、CSS、Java、Go等多种编程语言。

数据会保存吗?

你的Markdown内容会临时保存在浏览器本地存储中,刷新页面不会丢失。但建议定期导出备份重要文档。所有内容仅存储在本地,不会上传到服务器。

'; var blob=new Blob([html],{type:'text/html'}); var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='document.html';a.click(); URL.revokeObjectURL(a.href);toast('✅ 已下载'); } // Simple Markdown parser function marked(text){ var lines=text.split('\n'); var html=''; var inCode=false,codeLang=''; var inTable=false; for(var i=0;i'; continue; } if(!line.trim()){html+='
';continue} // Tables if(line.includes('|')&&line.match(/\|/g)&&line.match(/\|/g).length>=2){ var cells=line.split('|').map(function(s){return s.trim()}).filter(Boolean); if(line.match(/^[|\s:.-]+$/)){ if(inTable){html+='';inTable=false} continue; } if(!inTable){html+='';inTable=true} var tag=inTable&&html.includes('')?'th':'td'; if(html.includes('')&&html.includes(''))tag='td'; html+=''; for(var c=0;c'+inlineMD(cells[c])+''; } html+=''; if(tag==='th'){html+=''} continue; } if(inTable&&!line.includes('|')){html+='
';inTable=false} // Headings var hm=line.match(/^(#{1,6})\s+(.+)/); if(hm){html+=''+inlineMD(hm[2])+'';continue} // Blockquote if(line.startsWith('> ')){html+='
'+inlineMD(line.substring(2))+'
';continue} // Horizontal rule if(line.match(/^[-*_]{3,}$/)){html+='
';continue} // Unordered list if(line.match(/^[-*+]\s+/)){html+='
  • '+inlineMD(line.replace(/^[-*+]\s+/,''))+'
  • ';continue} // Ordered list if(line.match(/^\d+\.\s+/)){html+='
  • '+inlineMD(line.replace(/^\d+\.\s+/,''))+'
  • ';continue} // Task list var tm=line.match(/^- \[([ x])\] (.+)/); if(tm){ var checked=tm[1]==='x'?' checked':''; html+='
  • '+inlineMD(tm[2])+'
  • '; continue; } // Default paragraph html+='

    '+inlineMD(line)+'

    '; } if(inCode)html+=''; if(inTable)html+=''; return html; } function inlineMD(text){ text=escapeHTML(text); // Images text=text.replace(/!\[([^\]]*)\]\(([^)]+)\)/g,'$1'); // Links text=text.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'$1'); // Inline code text=text.replace(/\`([^\`]+)\`/g,'$1'); // Bold+Italic text=text.replace(/\*\*\*(.+?)\*\*\*/g,'$1'); // Bold text=text.replace(/\*\*(.+?)\*\*/g,'$1'); // Italic text=text.replace(/\*(.+?)\*/g,'$1'); // Strikethrough text=text.replace(/~~(.+?)~~/g,'$1'); return text; } renderMarkdown();