/**
* 文本处理工具函数
*/
/**
* 处理包含
标签的文本,转换为适合在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) + '...';
};