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. OPENCV3 API

    图像翻转 void flip(InputArray src, OutputArray dst, int flipCode); flipCode: 0: x 轴翻转 1: y 轴翻转 <0: x, ...

  2. java基于ssm框架开发的公交查询系统源码公交系统源码公交路线查询项目有论文

    简介 java基于ssm的公交路线查询系统,用户可以查询公交站点公交车路线以及公交换乘方案,还可以查看公交车路线地图,以及该站点所有的公交车路线. 演示视频: https://www.ixigua.c ...

  3. windows2020 更换sid

    cmd whoami /user 查看sid的值 点击运行sysprep程序.记得在"通用"前面打上勾 点击运行sysprep程序.记得在"通用"前面打上勾

  4. abc289g题解

    考虑枚举卖出的物品个数\(i\),把\(b_i\)从大到小排序. 题目的某人会买物品的条件转化为\(b_i\geq p_j-c_j\),这说明卖出的物品的集合是排序后\(b\)的一段前缀,且卖出\(i ...

  5. Centos 升级到指定内核

    1. 准备阶段 下载安装包到进行升级服务器 wget -c https://acs-ecp.oss-cn-hangzhou.aliyuncs.com/rpm/kernel-4.19.1-rpm.tar ...

  6. C/C++ FILE 和 fstream 用法详解

    FILE 是C语言自带的文件操作结构体, fstream 是C++的文件操作类,两者使用都比较常见,且用法比较类似,再次记录. 功能 FILE fstream 打开文件 FILE* fopen(cha ...

  7. c语言中位运算符及用法 异或

    a&b:  00000000 00000000   a&b=0x0 a|b : 00000000 01011111   a|b=0x5f a^b : 00000000 01011111 ...

  8. 项目脚手架之webpack

      分享版本: webpackV4.X (企企项目PC端-webpack: 4.29.6.webpack-cli: 3.1.1) 分享初衷: 本文我们结合企企项目(下面相关代码片段主要取至我们项目) ...

  9. java GUI AWT包

    第一个GUI程序,在netbeans里因为没有自动导包,害的我差点崩溃,因为没有导入AWT包,所以 public class Jfram { /** * @param args the command ...

  10. appium程序下载安装/appium desktop

    官网地址:http://appium.io/ 点击下载按钮 默认跳转到最新版本,点击 Releases 回到版本列表页 该页可以看到对应的版本及更新时间,(最好不要下载最新版本) 如果是 Window ...