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模拟多线程
Feb 07 Javascript
javascript firefox兼容ie的dom方法脚本
May 18 Javascript
javascript 日历提醒系统( 兼容所有浏览器 )
Apr 07 Javascript
Javascript 错误处理的几种方法
Jun 13 Javascript
javascript完美拖拽的实现方法
Sep 29 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
Dec 26 Javascript
详解javascript中对数据格式化的思考
Jan 23 Javascript
JS Testing Properties 判断属性是否在对象里的方法
Oct 01 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
Feb 04 Javascript
微信小程序实现预览图片功能
Oct 22 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
Oct 29 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
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
php的一个简单加密解密代码
2014/01/14 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
php面向对象之反射功能与用法分析
2017/03/29 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
基于Require.js使用方法(总结)
2017/10/26 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
详解vue mixins和extends的巧妙用法
2017/12/20 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
Python实现数据库编程方法详解
2015/06/09 Python
Python中GIL的使用详解
2018/10/03 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
三孔导游词
2015/02/05 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
防止web项目中的SQL注入
2021/12/06 MySQL