/** * 富文本解析工具 * @author sonve * @version 1.0.0 * @date 2024-12-04 */ import config from './config.js' /** * 将含有封面占位图形式的视频富文本转换成正常视频的富文本 * @param {String} richText 要进行处理的富文本字符串 * @returns {String} 返回处理结果 */ export function parseHtmlWithVideo(richText) { // 正则表达式匹配标签及其属性 const imgRegex = /]+)>/gi; // 正则表达式匹配data-custom属性中的url值 const customUrlRegex = /\bdata-custom="[^"]*url=([^&"]+)/i; return richText.replace(imgRegex, (match, attrs) => { // 查找data-custom属性中的url值 const urlMatch = attrs.match(customUrlRegex); if (urlMatch) { // 获取data-custom中的url const videoUrl = urlMatch[1]; // 解析出所有属性 const attrArray = attrs.split(/\s+/).filter(attr => attr.trim() !== ''); // 过滤掉src属性和data-custom属性 const newAttrs = attrArray.filter(attr => !attr.startsWith('src=') && !attr.startsWith('data-custom=')) .join(' '); // 构建新的video标签,保留原有的其他属性,但去除src和data-custom return ``; } // 如果没有匹配到data-custom中的url,则保持原样 return match; }); } /** * 带有视频的富文本逆向转换 * @description 可自定义处理封面 * @param {Promise} richText 要转换的富文本 * @param {Function} customCallback 自定义处理封面回调,需要return封面图片资源,自带参数为视频地址 * @returns {Promise} 转换后的富文本 注意异步处理 */ export async function replaceVideoWithImageRender(richText, customCallback) { // 正则表达式用于匹配