Files
ttstd-infinite-canvas/web/src/lib/markdown-plain-text.ts
2026-09-14 01:11:56 +08:00

23 lines
1.1 KiB
TypeScript

// 把 Markdown 消息压成一行纯文本,用于历史列表预览和标题:
// 去掉记号本身(##、**、[]() 等),保留可读内容;围栏代码块整体替换为占位词。
export function markdownPlainText(value: string, codePlaceholder = "代码块") {
return value
.replace(/```[\s\S]*?(?:```|$)/gu, ` ${codePlaceholder} `)
.replace(/^\s*\|?[\s:|-]*-[\s:|-]*\|?\s*$/gmu, " ")
.replace(/`([^`]*)`/gu, "$1")
.replace(/!\[([^\]]*)\]\(([^)]*)\)/gu, (_, alt: string, url: string) => ` ${alt || url} `)
.replace(/\[([^\]]*)\]\(([^)]*)\)/gu, "$1")
.replace(/^\s{0,3}#{1,6}\s+/gmu, "")
.replace(/^\s{0,3}>\s?/gmu, "")
.replace(/^\s{0,3}(?:[-*_]\s*){3,}$/gmu, " ")
.replace(/^\s*[-*+]\s+/gmu, "")
.replace(/^\s*\d+[.)]\s+/gmu, "")
.replace(/(\*\*|__)(.*?)\1/gu, "$2")
.replace(/~~(.*?)~~/gu, "$1")
.replace(/(^|\W)(\*|_)(?=\S)([\s\S]*?\S)\2(?=\W|$)/gu, "$1$3")
.replace(/<[^>]+>/gu, " ")
.replace(/\|/gu, " ")
.replace(/\s+/gu, " ")
.trim();
}