新闻详情

新闻详情

首页 / 资讯中心 / 详情

Mermaid源码排版规则

发布时间:2026/9/27 22:58:55来源:尧图网络
Mermaid源码排版规则
适配 flowchart / sequenceDiagram / classDiagram / erDiagram优先流程图最常用1. 行预处理每一行先trimEnd()移除行尾空格跳过空行压缩连续多个空行 → 只保留最多1个空行识别行类型图表声明行flowchart TD/graph LR/sequenceDiagram→直接顶格输出重置缩进块开始subgraph xxx/alt/loop/par→ 当前缩进输出本行缩进1块结束end→缩进-1再输出本行end和块关键字同级注释行%% xxx→ 跟随当前缩进原样保留注释内容连线/语句A--B、style A fill:#ccc、classDef→ 当前缩进输出并且自动给连线两侧补空格A--B→A -- B2. 连线空白规则重点美化匹配正则/(\s*)([A-Za-z0-9_\-])(\s*)(--[-]|-.-|)(\s*)([^;])/箭头运算符--,-.-,,---两侧强制加单个空格❗ 标签内字符串[hello -- world]内部不替换需要跳过引号包裹区域难点3. 缩进规则分图表类型✅ flowchart / graphflowchart TD A -- B subgraph Group B -- C C -- D end D -- Esubgraph本行按当前缩进之后层级1end层级先-1再打印 end节点连线、style、classDef使用当前层级缩进✅ sequenceDiagramsequenceDiagram participant U as User participant S as Server loop 循环 U-S: 请求 S--U: 返回 endparticipant/actor永远顶格不受缩进影响loop/alt/opt/par块开启缩进1end 回退缩进✅ classDiagramclassDiagram class User { String name login() }class X {当前缩进遇到{缩进1}缩进-1输出}4. 注释处理非常影响可读性%%单行注释跟随当前缩进原样保留内容不移动注释位置注释属于当前行不会漂移到别的节点旁边限制不支持多行注释%% ... \n ... %%Mermaid原生也很少用边界 case必须做判断否则会破坏图表引号内文本跳过A[Hello -- World]里面的--不要替换空格实现小技巧Lexer 扫描时维护inQuote标记碰到切换开关引号内部不做箭头正则替换。多行标签A[line1\nline2]内部换行保持原样。单行多连线A--B B--C可选配置项「是否强制拆分成多行」建议默认不拆分避免破坏用户意图。非法语法容错遇到无法识别的行原样输出不报错不要直接中断格式化。特殊字符# , : |在标签内不做任何修改。极简可运行 JS Demo流程图格式化核心可嵌入编辑器按钮点击事件仅演示 flowChart可扩展其他图表functionformatMermaid(source){constlinessource.split(/\r?\n/);letindentLevel0;constindent ;constresult[];letinQuotefalse;functionformatArrow(line){// 简单替换箭头跳过引号内部letout;for(leti0;iline.length;i){constcline[i];if(c)inQuote!inQuote;outc;if(!inQuote){outout.replace(/(--|-.-||---)/g, $1 );}}// 清理多余连续空格outout.replace(/\s/g, ).trim();returnout;}for(constrawLineoflines){constlinerawLine.trim();if(line){result.push();continue;}// 图表声明行if(/^(flowchart|graph|sequenceDiagram|classDiagram|erDiagram)/.test(line)){indentLevel0;result.push(line);continue;}// end 块结束先减缩进if(/^end\b/.test(line)){indentLevelMath.max(0,indentLevel-1);result.push(indent.repeat(indentLevel)line);continue;}// subgraph / loop / alt 块开始if(/^(subgraph|loop|alt|opt|par)\b/.test(line)){constformattedformatArrow(line);result.push(indent.repeat(indentLevel)formatted);indentLevel;continue;}// 注释行if(/^%%/.test(line)){result.push(indent.repeat(indentLevel)line);continue;}// 普通连线、style、classDefconstformattedformatArrow(line);result.push(indent.repeat(indentLevel)formatted);}// 合并空行连续空行只保留1个returnresult.join(\n).replace(/\n\s*\n/g,\n\n);}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

耒阳市古雍网站建设店新手入门:网站被黑挂马3招急救 2026/9/27 23:47:22

耒阳市古雍网站建设店新手入门:网站被黑挂马3招急救

耒阳市古雍网站建设店新手入门:网站被黑挂马3招急救 昨晚11点,手机突然弹出一条短信,说你的网站出现了非法内容。你慌了,打开浏览器一看,首页赫然挂着博彩广告,后台登录密码也被重置了。这时候,新手最容易犯的错误就是立刻删库重装,结果数据全丢,…

阅读更多 →
treg:轻量级终端正则调试工具,纯Go编写,离线可用 2026/9/27 23:47:16

treg:轻量级终端正则调试工具,纯Go编写,离线可用

1. 项目概述:Treg 不是缩写,而是真实存在的开源 CLI 工具最近在多个开发者社区和终端工具讨论区里,“treg”这个词频繁出现,但很多人第一反应是——这会不会是 T-Regulatory cell(调节性T细胞)的缩写&#…

阅读更多 →
Python程序打包实战:PyInstaller与Kivy打包EXE和APK全指南 2026/9/27 23:47:09

Python程序打包实战:PyInstaller与Kivy打包EXE和APK全指南

1. 从脚本到可执行文件:为什么打包这件事值得认真对待写过Python的人大概都有过这样的经历:本地跑得好好的脚本,发给同事或者朋友,对方一句“我电脑上没装Python”就把你堵回来了。尤其是做一些小工具、自动化脚本、爬虫可视化界面…

阅读更多 →
智慧养老微信小程序源码实战:从环境搭建到核心模块二次开发 2026/9/27 23:47:03

智慧养老微信小程序源码实战:从环境搭建到核心模块二次开发

简介:这是一套面向高校计算机及相关专业学生的智慧养老微信小程序毕业设计源码,采用JavaScript开发,已通过指导教师审核并获优秀评价,适合用作毕业设计课题、课程实践或学期综合作业。项目聚焦养老服务数字化场景,涵盖…

阅读更多 →
模型部署工程师必知:CUDA编程模型与GPU架构对推理性能的核心影响 2026/9/27 23:47:03

模型部署工程师必知:CUDA编程模型与GPU架构对推理性能的核心影响

1. 从一次推理延迟异常说起:为什么部署工程师必须懂CUDA模型部署与推理优化这个系列写到第五篇,前面几篇聊了量化、算子融合、显存管理这些偏上层的东西。但说实话,如果你对底层的CUDA编程模型和GPU硬件架构没有基本认知,很多优化…

阅读更多 →
网络舆情分析的免费网站完整流程 2026/9/27 23:47:03

网络舆情分析的免费网站完整流程

5个免费工具搞定网络舆情分析网站搭建 网站被黑挂马不知道怎么办?别慌,先别急着删库。很多运营同学一遇到页面弹出博彩广告、链接指向境外服务器,第一反应就是重装系统。这恰恰是最浪费时间的做法。真正的解法不是“堵”,而是“疏”和“查”。你需要一套…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉