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 02 Javascript
js网页右下角提示框实例
Oct 14 Javascript
jquery插件推荐浏览器嗅探userAgent
Nov 09 Javascript
jquery实现点击页面计算点击次数
Jan 23 Javascript
jQuery div拖拽用法实例
Jan 14 Javascript
jquery利用json实现页面之间传值的实例解析
Dec 12 Javascript
详解vue与后端数据交互(ajax):vue-resource
Mar 16 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
Apr 12 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
Jul 20 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
Aug 29 Javascript
关于vue.js中实现方法内某些代码延时执行
Nov 14 Javascript
使用vue实现一个电子签名组件的示例代码
Jan 06 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
服务器web工具 php环境下
2010/12/29 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
node在两个div之间移动,用ztree实现
2013/03/06 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
2016/04/15 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
python通过shutil实现快速文件复制的方法
2015/03/14 Python
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
九步学会Python装饰器
2015/05/09 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
安全负责人任命书
2014/06/06 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
React如何创建组件
2021/06/27 Javascript