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 相关文章推荐
根据分辩率调用不同的CSS.
Jan 08 Javascript
Dojo之路:如何利用Dojo实现Drag and Drop效果
Apr 10 Javascript
javascript中callee与caller的用法和应用场景
Dec 08 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
Mar 17 Javascript
js简易namespace管理器 实例代码
Jun 21 Javascript
JavaScript中的比较操作符&gt;、=、
Dec 31 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
Jan 07 Javascript
贴近用户体验的Jquery日期、时间选择插件
Aug 19 Javascript
javascript实现保留两位小数的多种方法
Dec 18 Javascript
设置点击文本框或图片弹出日历控件的实现代码
May 12 Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 Javascript
vue 通过绑定事件获取当前行的id操作
Jul 27 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
打造计数器DIY三步曲(上)
2006/10/09 PHP
php 三维饼图的实现代码
2008/09/28 PHP
php结合飞信 免费天气预报短信
2009/05/07 PHP
php date与gmdate的获取日期的区别
2010/02/08 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
2016/08/05 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
Python创建xml文件示例
2017/03/22 Python
python3设计模式之简单工厂模式
2017/10/17 Python
python方向键控制上下左右代码
2018/01/20 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
Python实现京东秒杀功能代码
2019/05/16 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
旅游文化节策划方案
2014/06/06 职场文书
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL