JavaScript 实现 C# 风格的字符串格式化方法

作者:百宝袋时间:2026-10-29 14:22:34浏览:143

本文介绍如何在 JavaScript 中模拟 C# 的字符串格式化功能。通过扩展 String.prototype,实现支持对象属性名替换和索引占位符替换的 format 方法。代码利用正则表达式匹配 {key} 或 {index} 格式,分别处理对象直接量和参数列表两种场景,提供灵活的字符串拼接方案。

JavaScript 实现 C# 风格的字符串格式化方法

JavaScript 模拟 C# 字符串格式化操作

基础实现:基于索引的格式化


/***
** 功能: 字符串格式化替换操作
***/
String.prototype.format = function () {
 var args = arguments;
 return this.replace(/\{(\d+)\}/g,
 function (m, i) {
  return args[i];
 });
}

在 JavaScript 中实现类似 C# 的字符串处理函数 format():

熟悉 C# 开发的开发者应该了解 format() 方法,下文将演示如何在 JavaScript 中实现相同的功能。

代码实例如下:

增强实现:支持对象属性与索引混合格式化


String.prototype.format=function(args){ 
 if(arguments.length>0){ 
 var result=this; 
 if(arguments.length==1&&typeof(args)=="object"){ 
  for(var key in args){ 
  var reg=new RegExp("({"+key+"})","g"); 
  result=result.replace(reg, args[key]); 
  } 
 } 
 else{ 
  for(var i=0;i<arguments.length;i++){ 
  if(arguments[i]==undefined){ 
   return ""; 
  } 
  else{ 
   var reg=new RegExp ("({["+i+"]})","g"); 
   result = result.replace(reg, arguments[i]); 
  } 
  } 
 } 
 return result; 
 } 
 else{ 
 return this; 
 } 
}
var fistStr="{0}欢迎您,希望大家能够得到想要的{1}";
var secondStr="{webName}欢迎您,希望大家能够得到想要的{favoriate}";
var firstOut=fistStr.format("","东西");
var secondOut=secondStr.format({webName:"",favoriate:"东西"});
console.log(firstOut);
console.log(secondOut); 

上述代码实现了预期的效果,接下来详细介绍其实现原理。

实现原理与代码详解

一、实现原理:

原理较为直观,具体逻辑可参考代码注释。核心思路是使用正则表达式定位需要替换的字符串片段,随后使用指定的内容进行替换。在代码中,指定的内容既可以是直接的字符串字面量,也可以是对象的属性值。

二、代码注释:

1. String.prototype.format=function(args){{}},通过原型链为 String 对象添加实例方法 format,该方法用于执行字符串处理逻辑。

2. if(arguments.length>0),判断传入的参数数量是否大于 0。

3. var result=this,将当前字符串对象的引用赋值给变量 result。

4. if(arguments.length==1&&typeof(args)=="object"),用于判断传入的参数是否为一个对象字面量。

5. for(var key in args),遍历对象字面量中的各个属性。

6. var reg=new RegExp("({"+key+"})","g"),构建正则表达式以匹配指定的字符串占位符。

7. result=result.replace(reg,args[key]),使用对象的属性值替换匹配到的字符串。

8. else{},当传入的参数不是对象字面量时执行此分支。

9. for(var i=0;i<arguments.length;i++),遍历传入的所有参数。

10. if(arguments[i]==undefined),如果参数值为 undefined,则返回空字符串。

11. var reg=new RegExp("({["+i+"]})","g"),构建正则表达式以匹配指定索引的字符串。

12. result=result.replace(reg,arguments[i]),执行字符串替换操作。

13. return result,返回替换完成后的字符串。

14. return this,若未传入任何参数,则直接返回原始字符串。

作者最新文章