javascript模拟C#格式化字符串


Posted in Javascript onAugust 26, 2015

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

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

js实现类似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,将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==undefined),如果为undefined,就返回空字符串。

11.var reg=new RegExp("({["+i+"]})","g"),用来匹配指定的字符串。

12.result=result.replace(reg,arguments),进行替换。

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

14.return this,如果没有传递参数,则返回字符串本身。

Javascript 相关文章推荐
JavaScript写的一个自定义弹出式对话框代码
Jan 17 Javascript
jquery怎样实现ajax联动框(二)
Mar 08 Javascript
js数组去重的常用方法总结
Jan 24 Javascript
Node.js中使用计时器定时执行函数详解
Aug 15 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
Jan 26 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
Mar 03 Javascript
使用jQuery加载html页面到指定的div实现方法
Jul 13 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
Sep 08 Javascript
JS作用域深度解析
Dec 29 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
Feb 05 Javascript
js实现二级菜单点击显示当前内容效果
Apr 28 Javascript
微信小程序实现点击效果
Jun 21 Javascript
jQuery实现滚动切换的tab选项卡效果代码
Aug 26 #Javascript
基于jquery实现一个滚动的分步注册向导-附源码
Aug 26 #Javascript
jQuery带时间的日期控件代码分享
Aug 26 #Javascript
js仿苹果iwatch外观的计时器代码分享
Aug 26 #Javascript
jQuery下拉友情链接美化效果代码分享
Aug 26 #Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
Aug 26 #Javascript
jquery实现平滑的二级下拉菜单效果
Aug 26 #Javascript
You might like
深入PHP FTP类的详解
2013/06/13 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
python如何读写csv数据
2018/03/21 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
python Tcp协议发送和接收信息的例子
2019/07/22 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
利用python汇总统计多张Excel
2020/09/22 Python
利用Python优雅的登录校园网
2020/10/21 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
个人求职信范文分享
2014/01/06 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
党校毕业个人总结
2015/02/28 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
Golang的继承模拟实例
2021/06/30 Golang