Initial commit
This commit is contained in:
75
src/utils/textUtils.js
Normal file
75
src/utils/textUtils.js
Normal file
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
* 文本处理工具函数
|
||||
*/
|
||||
|
||||
/**
|
||||
* 处理包含<br>标签的文本,转换为适合在React中显示的格式
|
||||
* @param {string} text - 包含<br>标签的文本
|
||||
* @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(/<br\s*\/?>(\s*)/g, '\n') // 将br标签转换为换行符
|
||||
.replace(/\n{2,}/g, '\n') // 去掉多余的换行符
|
||||
.replace(/\n/g, '<br/>'); // 重新转换为br标签
|
||||
|
||||
case 'text':
|
||||
// 用于普通Text组件,配合whiteSpace="pre-line"使用
|
||||
return text
|
||||
.replace(/<br\s*\/?>(\s*)/g, '\n') // 将br标签转换为换行符
|
||||
.replace(/\n{2,}/g, '\n') // 去掉多余的换行符
|
||||
.trim();
|
||||
|
||||
case 'remove':
|
||||
// 直接去掉br标签,用空格替代
|
||||
return text
|
||||
.replace(/<br\s*\/?>(\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) + '...';
|
||||
};
|
||||
Reference in New Issue
Block a user