| // app/static/js/utils.js - 辅助函数 | |
| /** | |
| * 将文件转换为 Base64 编码字符串。 | |
| * @param {File} file - 要转换的文件对象。 | |
| * @returns {Promise<string>} - Base64 编码的字符串(不包含前缀)。 | |
| */ | |
| export async function fileToBase64(file) { | |
| return new Promise((resolve, reject) => { | |
| const reader = new FileReader(); | |
| reader.onload = () => resolve(reader.result.split(',')[1]); | |
| reader.onerror = error => reject(error); | |
| reader.readAsDataURL(file); | |
| }); | |
| } | |
| /** | |
| * 从文本中提取 Mermaid 代码块,并返回剩余文本。 | |
| * @param {string} text - 包含 Mermaid 代码的文本。 | |
| * @returns {{cleanedText: string, mermaidCodes: string[]}} - 包含清理后的文本和提取的Mermaid代码数组。 | |
| */ | |
| export function extractContent(text) { | |
| const mermaidCodes = []; | |
| let cleanedText = text; | |
| // 提取 Mermaid 代码块 | |
| const mermaidRegex = /```mermaid\n([\s\S]*?)\n```/g; | |
| let mermaidMatch; | |
| // 使用一个临时变量来迭代,避免修改原始字符串导致正则匹配问题 | |
| let tempText = cleanedText; | |
| while ((mermaidMatch = mermaidRegex.exec(tempText)) !== null) { | |
| mermaidCodes.push(mermaidMatch[1]); | |
| // 从 cleanedText 中移除已提取的 Mermaid 代码块 | |
| // 注意:这里需要确保移除的是原始位置的匹配内容 | |
| cleanedText = cleanedText.replace(mermaidMatch[0], ''); | |
| } | |
| return { cleanedText: cleanedText.trim(), mermaidCodes: mermaidCodes }; | |
| } | |