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无缝滚动代码
Jan 03 Javascript
js null,undefined,字符串小结
Aug 21 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
Nov 17 Javascript
原生js和jquery实现图片轮播特效
Apr 23 Javascript
jQuery满屏焦点图左右滚动特效代码分享
Sep 07 Javascript
jQuery实现的简单拖动层示例
Feb 22 Javascript
Bootstrap3多级下拉菜单
Feb 24 Javascript
jQuery创建及操作xml格式数据示例
May 26 jQuery
微信小程序实现图片选择并预览功能
Jul 25 Javascript
Element-UI中关于table表格的那些骚操作(小结)
Aug 15 Javascript
layer.js之回调销毁对话框的例子
Sep 11 Javascript
Vue为什么要谨慎使用$attrs与$listeners
Aug 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
PHP引用符&amp;的用法详细解析
2013/08/22 PHP
PHP简单获取视频预览图的方法
2015/03/12 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
微信小程序排坑指南详解
2018/05/23 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python Matplotlib库入门指南
2015/05/18 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
为什么会有内存对齐
2016/10/10 面试题
中医药大学市场营销专业自荐信
2013/09/29 职场文书
司机检讨书
2014/02/13 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
聘用意向书
2014/07/29 职场文书
师德师风的心得体会
2014/09/02 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
导游词之桂林
2019/08/20 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
java executor包参数处理功能 
2022/02/15 Java/Android