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 相关文章推荐
JS 参数传递的实际应用代码分析
Sep 13 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
Jan 06 Javascript
jquery实现具有嵌套功能的选项卡
Feb 12 Javascript
Bootstrap实现提示框和弹出框效果
Jan 11 Javascript
vue.js选中动态绑定的radio的指定项
Jun 02 Javascript
React中如何引入Angular组件详解
Aug 09 Javascript
小程序兼容安卓和IOS数据处理问题及坑
Sep 18 Javascript
vue中el-upload上传图片到七牛的示例代码
Oct 19 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
Aug 26 Javascript
解决layui 三级联动下拉框更新时回显的问题
Sep 03 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 Javascript
Axios代理配置及封装响应拦截处理方式
Apr 07 Vue.js
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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
python实现接口并发测试脚本
2019/06/25 Python
Python 使用多属性来进行排序
2019/09/01 Python
Python sorted排序方法如何实现
2020/03/31 Python
Python如何实现爬取B站视频
2020/05/20 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
Canvas绘制浮动球效果的示例
2017/12/29 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
资深财务管理人员自我评价
2013/09/22 职场文书
建筑毕业生自我鉴定
2013/10/18 职场文书
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
文化宣传方案
2014/03/13 职场文书
学生安全承诺书
2014/05/22 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
孩子满月酒答谢词
2015/09/30 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫