23 lines
1.1 KiB
TypeScript
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();
|
|
}
|