/** * 从 HTML 字符串中按出现顺序收集引用标签的 data-id(mycite / autocite 与稿面、TinyMCE、历史库一致) * 支持逗号多 id、属性任意顺序、单/双引号 */ export function extractAutociteIdsFromHtmlString(raw) { if (!raw || typeof raw !== 'string') return []; const ids = []; const tagRe = /<(mycite|autocite)\b[^>]*>/gi; let m; while ((m = tagRe.exec(raw)) !== null) { const tag = m[0]; const dbl = tag.match(/\bdata-id\s*=\s*"([^"]*)"/i); const sgl = tag.match(/\bdata-id\s*=\s*'([^']*)'/i); const val = dbl ? dbl[1] : sgl ? sgl[1] : ''; if (!val) continue; val.split(',').forEach((part) => { const id = part.trim(); if (id && !ids.includes(id)) ids.push(id); }); } return ids; }