/** * 文本处理工具函数 */ /** * 处理包含
标签的文本,转换为适合在React中显示的格式 * @param {string} text - 包含
标签的文本 * @param {string} mode - 处理模式:'html' 使用dangerouslySetInnerHTML, 'text' 转换为纯文本换行, 'remove' 直接去掉br标签 * @returns {string} 处理后的文本 */ export const formatTextWithBr = (text, mode = 'text') => { if (!text) return ''; switch (mode) { case 'html': // 用于dangerouslySetInnerHTML,保持换行效果 return text .replace(/(\s*)/g, '\n') // 将br标签转换为换行符 .replace(/\n{2,}/g, '\n') // 去掉多余的换行符 .replace(/\n/g, '
'); // 重新转换为br标签 case 'text': // 用于普通Text组件,配合whiteSpace="pre-line"使用 return text .replace(/(\s*)/g, '\n') // 将br标签转换为换行符 .replace(/\n{2,}/g, '\n') // 去掉多余的换行符 .trim(); case 'remove': // 直接去掉br标签,用空格替代 return text .replace(/(\s*)/g, ' ') // 将br标签替换为空格 .replace(/\s{2,}/g, ' ') // 去掉多余的空格 .trim(); default: return text; } }; /** * 为文本添加样式化的换行处理 * @param {string} text - 原始文本 * @returns {object} 包含处理后文本和样式的对象 */ export const getFormattedTextProps = (text) => { if (!text) return { children: '', props: {} }; const formattedText = formatTextWithBr(text, 'text'); return { children: formattedText, props: { whiteSpace: 'pre-line', lineHeight: '1.6', wordBreak: 'break-word' } }; }; /** * 为工具提示(Tooltip)优化的文本格式化 * @param {string} text - 原始文本 * @param {number} maxLength - 最大长度,超出部分用...省略 * @returns {string} 处理后的文本 */ export const formatTooltipText = (text, maxLength = 200) => { if (!text) return ''; const cleaned = formatTextWithBr(text, 'text'); if (cleaned.length <= maxLength) return cleaned; return cleaned.substring(0, maxLength) + '...'; };