C#带自定义格式化器的String.Format如何在JS中实现等效功能
JS实现C#风格自定义字符串格式化
JS 原生没有内置和C# IFormatProvider 对等的字符串格式化能力,我们可以手动封装一个对齐C#用法的工具函数,实现相同的自定义格式化效果。
完整实现代码
1. 核心格式化工具函数
/** * 对齐C# String.Format自定义格式化能力的工具函数 * @param {object} formatter 自定义格式化器,必须实现format方法 * @param {string} formatStr 格式化模板 * @param {...any} args 待格式化的参数 * @returns {string} 格式化后的字符串 */ function customFormat(formatter, formatStr, ...args) { // 匹配 {索引} 或 {索引:格式符} 格式的占位符 const placeholderReg = /{(\d+)(?::([^}]+))?}/g; return formatStr.replace(placeholderReg, (_, indexStr, formatFlag) => { const targetArg = args[Number(indexStr)]; // 传入了合法格式化器则调用自定义格式化逻辑 if (formatter && typeof formatter.format === 'function') { return formatter.format(formatFlag || '', targetArg); } // 无格式化器走默认值替换 return targetArg != null ? String(targetArg) : _; }); }
2. 自定义格式化器实现(对应C#的CustomFormatter)
const customFormatter = { /** * 自定义格式化逻辑 * @param {string} formatFlag 格式标识符,比如u、l * @param {any} arg 待格式化的参数 * @returns {string} 格式化后的内容 */ format(formatFlag, arg) { // 可以根据需求扩展任意格式分支 switch(formatFlag) { case 'u': return String(arg).toUpperCase(); case 'l': return String(arg).toLowerCase(); // 可扩展更多格式,比如日期、数字格式化等 // case 'date': // return new Date(arg).toLocaleDateString(); default: return arg != null ? String(arg) : ''; } } };
3. 使用示例
// 用法和C#示例完全对齐 const res = customFormat(customFormatter, "{0:u} {1:l}", "hello", "WORLD"); console.log(res); // 输出:HELLO world
内容的提问来源于stack exchange,提问作者ATT
相关产品推荐
相关产品推荐

