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 相关文章推荐
Jquery post传递数组方法实现思路及代码
Apr 28 Javascript
javascript实现完美拖拽效果
May 06 Javascript
跟我学习javascript的this关键字
May 28 Javascript
学习JavaScript设计模式之策略模式
Jan 12 Javascript
JavaScript“尽快失败”的原则实例详解
Oct 08 Javascript
Vue2组件tree实现无限级树形菜单
Mar 29 Javascript
妙用Angularjs实现表格按指定列排序
Jun 23 Javascript
two.js之实现动画效果示例
Nov 06 Javascript
详解webpack提取第三方库的正确姿势
Dec 22 Javascript
AngularJS实现的简单拖拽功能示例
Jan 02 Javascript
Vuex的初探与实战小结
Nov 26 Javascript
vue实例的选项总结
Jun 09 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
hadoop中一些常用的命令介绍
2013/06/19 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
php中file_get_content 和curl以及fopen 效率分析
2014/09/19 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
Js+XML 操作
2006/09/20 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
一起来写段JS drag拖动代码
2010/12/09 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
学习vue.js计算属性
2016/12/03 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
使用D3.js构建实时图形的示例代码
2018/08/28 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
python中mechanize库的简单使用示例
2014/01/10 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
python中不能连接超时的问题及解决方法
2018/06/10 Python
python range实例用法分享
2020/02/06 Python
Python 使用office365邮箱的示例
2020/10/29 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
文秘专业自荐信
2013/10/14 职场文书
黄河象教学反思
2014/02/10 职场文书
生物技术专业求职信
2014/06/10 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
html5调用摄像头实例代码
2021/06/28 HTML / CSS
搭建Yolov5服务器
2022/04/30 Servers