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 相关文章推荐
利用javascript中的call实现继承
Jan 22 Javascript
jquery pagination插件实现无刷新分页代码
Oct 13 Javascript
jQuery验证插件 Validate详解
Nov 20 Javascript
javascript获取flash版本号的方法
Nov 20 Javascript
Svg.js实例教程及使用手册详解(一)
May 16 Javascript
使用BootStrap实现标签切换原理解析
Mar 14 Javascript
Vue2 使用 Echarts 创建图表实例代码
May 18 Javascript
vue的diff算法知识点总结
Mar 29 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
Jul 26 Javascript
发布一款npm包帮助理解npm的使用
Jan 03 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
Nov 10 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
Feb 07 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
PHP的简单跳转提示的实现详解
2019/03/14 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
用Jquery实现滚动新闻
2014/02/12 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
Python中functools模块函数解析
2017/03/12 Python
python自动化报告的输出用例详解
2018/05/30 Python
详解django自定义中间件处理
2018/11/21 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
pytorch 模型可视化的例子
2019/08/17 Python
python集合常见运算案例解析
2019/10/17 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
小学教师的个人自我鉴定
2013/10/24 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
土木工程师职业规划范文
2014/03/07 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
MySQL系列之七 MySQL存储引擎
2021/07/02 MySQL
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript