如何在Material-Table列中格式化字符串,将键名含冒号部分设为粗体?
解决方案
核心问题分析
你原来的代码直接用, 拆分整个字符串会导致值中包含, 的键值对被错误拆分(比如DomainLeader: Doe, John会被拆成DomainLeader: Doe和John),所以首先要先正确提取每个完整的键值对,再做格式化渲染。
修改后的代码实现
import Box from '@mui/material/Box'; // 解析超长字符串为键值对的工具函数 const parseLongString = (str) => { // 正则匹配:捕获键名 + 可包含逗号的值(直到下一个键名:出现) const regex = /(\w+): ([^,]+(?:, [^:]+)*)(?=, \w+:|$)/g; const pairs = []; let match; while ((match = regex.exec(str)) !== null) { pairs.push({ key: match[1], value: match[2].trim() }); } // 匹配失败时返回原始内容作为降级处理 return pairs.length > 0 ? pairs : [{ key: '', value: str }]; }; // Material-Table 目标列的 render 配置 render: (rowData) => { const keyValuePairs = parseLongString(rowData.YourTargetColumn); // 替换为你的实际列名 return ( <Box style={{ display: 'flex', flexWrap: 'wrap', gap: '0.5rem' }}> {keyValuePairs.map((pair, idx) => ( <span key={idx}> <em><strong>{pair.key}:</strong></em> {pair.value} {/* 最后一个键值对不添加尾部逗号 */} {idx !== keyValuePairs.length - 1 && ', '} </span> ))} </Box> ); },
关键调整说明
- 精准拆分键值对:通过正则表达式匹配完整的
键名: 值结构,避免误拆分值中包含的,。 - 匹配需求样式:用
<em><strong>{pair.key}:</strong></em>实现你要的斜体加粗键名效果。 - 布局优化:
flexWrap: 'wrap'让超长内容自动换行,gap控制键值对间距,提升可读性。 - 容错处理:若字符串格式不规范,自动降级显示原始内容,避免空渲染问题。
内容的提问来源于stack exchange,提问作者Ciaran Crowley
相关产品推荐
相关产品推荐

