能否对Markdown+Mermaid.js生成的图表进行程序化结构查询?
Mermaid图表的程序化查询与验证方案
可以通过程序化方式查询Markdown中嵌入的Mermaid图表结构,验证特定子对象或文本是否存在,核心是先处理Mermaid的文本源码,再通过解析或匹配完成校验,以下是几种实用方法:
1. 直接文本匹配(适合简单场景)
Mermaid图表基于纯文本语法编写,对于只需要检查特定文本是否存在的场景,直接用字符串包含判断或正则表达式即可:
- 比如要验证流程图里是否有标签为「Start」的节点,直接在Mermaid源码字符串中查找
[Start] - 示例(JavaScript):
const mermaidCode = 'graph TD; A[Start] --> B[Process];'; const hasTarget = mermaidCode.includes('[Start]'); console.log(hasTarget); // 输出true - 优势:实现简单,无需额外依赖;缺点:无法处理复杂结构的精确校验(比如同名节点在不同子图的情况)
2. 基于Mermaid官方解析库(精准校验复杂结构)
Mermaid提供了官方解析工具,能将源码转换成抽象语法树(AST),遍历AST可精准验证目标元素:
- 依赖包:
@mermaid-js/mermaid-parser(npm包) - 实现步骤:
- 安装依赖:
npm install @mermaid-js/mermaid-parser - 解析源码为AST并校验:
import { parse } from '@mermaid-js/mermaid-parser'; const mermaidCode = `graph TD subgraph Sub1 A[Start] --> B[Process] end subgraph Sub2 C[End] end`; const ast = parse(mermaidCode); // 检查子图Sub1中是否存在标签为Start的节点 const hasTargetNode = ast.diagram.subgraphs .find(sub => sub.id === 'Sub1') ?.nodes.some(node => node.label === 'Start'); console.log(hasTargetNode); // 输出true
- 安装依赖:
- 优势:能处理嵌套子图、分支流程等复杂结构,校验结果精准
3. 从Markdown中提取Mermaid后再校验
如果Mermaid是嵌入在Markdown文档中的,需要先提取出Mermaid代码块,再进行后续校验:
- 依赖包:Markdown解析库(如
marked)+ Mermaid解析库 - 实现步骤:
- 解析Markdown文本,提取语言为
mermaid的代码块 - 对提取的Mermaid代码用上述方法校验
- 解析Markdown文本,提取语言为
- 示例代码:
import { marked } from 'marked'; import { parse } from '@mermaid-js/mermaid-parser'; const markdownContent = `# 业务流程图 \`\`\`mermaid graph TD; A[用户登录] --> B[权限校验]; \`\`\``; // 提取Mermaid代码 let targetMermaidCode = ''; marked.parse(markdownContent, { walkTokens: token => { if (token.type === 'code' && token.lang === 'mermaid') { targetMermaidCode = token.text; } } }); // 校验是否存在「权限校验」节点 const ast = parse(targetMermaidCode); const hasAuthNode = ast.diagram.nodes.some(node => node.label === '权限校验'); console.log(hasAuthNode); // 输出true
内容的提问来源于stack exchange,提问作者Julian A.
相关产品推荐
相关产品推荐

