23 lines
831 B
JavaScript
23 lines
831 B
JavaScript
/**
|
||
* 从 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;
|
||
}
|