function format(pattern){
if(! (pattern instanceof String)){
throw new TypeError("错误的参数类型");
}
var buf = [];
for(var i=0; i<pattern.length; i++){
if(pattern[i] == '{'){
var flag = 0; //1:错误的左括号,2:匹配到对应右括号,3:错误
var j = 0;
for(j=i+1; j<pattern.length; j++){
if(pattern[j] == '{'){
flag = 1;
break;
} else if(pattern[j] == '}'){
flag = 2;
break;
}
}
if(flag == 0){
buf.push(pattern[i]);
continue;
}
if(flag == 1){
for(; i<j; i++){
buf.push(pattern[i]);
}
i--;
} else if(flag == 2){
var sub = pattern.substr(i+1, j-i-1);
var pos = parseInt(sub);
if(!isNaN(pos) && !isNaN(sub)){
if(pos < arguments.length-1 && pos >= 0){
buf.push(arguments[pos+1]);
i = j;
} else {
flag = 3;
}
} else if (arguments.length >= 2 && arguments[1].hasOwnProperty(sub)){
buf.push(arguments[1][sub]);
i = j;
}
else {
flag = 3;
}
if(flag == 3){
for(; i<=j; i++){
buf.push(pattern[i]);
}
i--;
}
}
} else {
buf.push(pattern[i]);
}
}
return buf.join("");
}

使用方式:

//使用从0开始的下标来匹配参数位置
var str1 = format("{0}, {1}", 10, 20);
//使用字段名来匹配参数位置,但只能匹配第一个参数的对应字段
var str2 = format("{key}, {value}, {1}", {key:"aa", value:10}, 20);

纯js实现字符串formate方法的更多相关文章

  1. JS常用字符串处理方法应用总结

    这篇文章主要总结了JS常用字符串的处理方法,需要的朋友可以参考下   1.indexOf()方法,从前往后查找字符串位置,大小写敏感,从0开始计数.同理,lastIndexOf() 方法从后往前,两个 ...

  2. [JS高程] 字符串模式匹配方法

    目录 1. RegExp 对象 2. 字符串模式匹配方法 2.1 match() , search() 2.2 replace() 2.2.1 第二个参数为字符串的应用情况 2.2.2 第二个参数为函 ...

  3. js中字符串的方法

    js String对象中常用方法小结,需要的朋友可以参考下: 1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码. strObj.charCodeAt(index) 说明: ...

  4. js常用字符串处理方法

    JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...

  5. js截取字符串的方法

    1,slice(a, b) 第一个参数表示起始位置,第二个表示截取到但不包含 关于参数正负问题,只要记住一点:永远不能倒着截取!否则返回空字符串 2,substring(a, b) 第一个参数表示起始 ...

  6. js的字符串charAt()方法

    //字符中的字符从左向右进行索引,由0开始,字符串中的空格也算在内 var string = "charAt find word position"; document.write ...

  7. js 把字符串当做方法执行

    <SCRIPT LANGUAGE="JavaScript"> function test(str){ alert(str); } eval('test("aa ...

  8. js中A包含B的写法与分割字符串的方法

    在java中A包含B的写法 if(A.contains(B)){ ... } 在js中没有contains方法,应该使用下面这种方法: var an = "传染性.潜伏性.破坏性" ...

  9. JS判断字符串长度的5个方法

    这篇文章主要介绍了JS判断字符串长度的5个方法,并且区分中文和英文,需要的朋友可以参考下 目的:计算字符串长度(英文占1个字符,中文汉字占2个字符)   方法一:    代码如下: String.pr ...

  10. 纯JS画点、画线、画圆的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 物料Classification 分类系统

    作用:可以追加物料的属性,因为在物料主界面字段是有限的,并且并不是符合所有企业的业务,可以使用追加属性的方式给物料添加各式各样的属性 1.创建特性,Tcode:CT04 2.创建分类 Tcode:CL ...

  2. Win10家庭版安装docker desktop

    1.开启Hyper-V在桌面新建hyperv.cmd文件,内容如下: pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*H ...

  3. css布局、动画要点

    background属性 属性解释background属性是css中应用比较多,且比较重要的一个属性,它是负责给盒子设置背景图片和背景颜色的,background是一个复合属性,它可以分解成如下几个设 ...

  4. Vue3+vite+Echarts案例大屏可视化--千峰(推荐)

    https://www.bilibili.com/video/BV14u411D7qK?p=33&spm_id_from=pageDriver&vd_source=e2cfe74d93 ...

  5. Day 22 22.1:增量式爬虫

    Day 22 22.1:增量式爬虫 爬虫应用场景分类 通用爬虫 聚焦爬虫 功能爬虫 分布式爬虫 增量式爬虫: 用来监测网站数据更新的情况(爬取网站最新更新出来的数据). 只是一种程序设计的思路,使用什 ...

  6. iOS开发 React Native与iOS交互汇总

    RN简介 React Native 是一个使用React和应用平台的原生功能来构建 Android 和 iOS 应用的开源框架.起源于faceBbook内部,2013开源. React Native ...

  7. 在MyBatis-Plus整合dynamic-datasource @DS失效

    因为是事务导致的 解决方案: 1.删除事务 2.使用分布式事务 3.修改事务的传播机制 3.使用DS的本地事务 @DSTransactional 但切记不可和Spring的事务共存 附传播机制 事务传 ...

  8. window server 2012R2部署asp.net core项目应用程序池自动停止

    当在windows  server 2012R2上部署asp.net core项目时,需要安装the Hosting Bundle,但当我们安装完dotnet-hosting后,浏览站点应用程序池会自 ...

  9. Unity 纯C# 完成 APK从下载到 自安装

    最简单的就是用androidStudio 进行编辑,打个aar 包,在Unity中调用方法,很便捷以下内容均转载Unity论坛,Android API24版本下可用,android API 24以上版 ...

  10. yum install的时候提示:Loaded plugins: fastestmirror

    fastestmirror是yum的一个加速插件,这里是插件提示信息是插件不能用了. 不能用就先别用呗,禁用掉,先yum了再说. 1.修改插件的配置文件 # vi  /etc/yum/pluginco ...