纯js实现字符串formate方法
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方法的更多相关文章
- JS常用字符串处理方法应用总结
这篇文章主要总结了JS常用字符串的处理方法,需要的朋友可以参考下 1.indexOf()方法,从前往后查找字符串位置,大小写敏感,从0开始计数.同理,lastIndexOf() 方法从后往前,两个 ...
- [JS高程] 字符串模式匹配方法
目录 1. RegExp 对象 2. 字符串模式匹配方法 2.1 match() , search() 2.2 replace() 2.2.1 第二个参数为字符串的应用情况 2.2.2 第二个参数为函 ...
- js中字符串的方法
js String对象中常用方法小结,需要的朋友可以参考下: 1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码. strObj.charCodeAt(index) 说明: ...
- js常用字符串处理方法
JS自带函数concat将两个或多个字符的文本组合起来,返回一个新的字符串.var a = "hello";var b = ",world";var c = a ...
- js截取字符串的方法
1,slice(a, b) 第一个参数表示起始位置,第二个表示截取到但不包含 关于参数正负问题,只要记住一点:永远不能倒着截取!否则返回空字符串 2,substring(a, b) 第一个参数表示起始 ...
- js的字符串charAt()方法
//字符中的字符从左向右进行索引,由0开始,字符串中的空格也算在内 var string = "charAt find word position"; document.write ...
- js 把字符串当做方法执行
<SCRIPT LANGUAGE="JavaScript"> function test(str){ alert(str); } eval('test("aa ...
- js中A包含B的写法与分割字符串的方法
在java中A包含B的写法 if(A.contains(B)){ ... } 在js中没有contains方法,应该使用下面这种方法: var an = "传染性.潜伏性.破坏性" ...
- JS判断字符串长度的5个方法
这篇文章主要介绍了JS判断字符串长度的5个方法,并且区分中文和英文,需要的朋友可以参考下 目的:计算字符串长度(英文占1个字符,中文汉字占2个字符) 方法一: 代码如下: String.pr ...
- 纯JS画点、画线、画圆的方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- SAP Process Orchestration (SAP PO): The Comprehensive Guide (2nd Edition) (SAP PRESS)
SAP Process Orchestration (SAP PO): The Comprehensive Guide (2nd Edition) (SAP PRESS) 有需要的联系 wx :erp ...
- java的知识点
java 知识点 1.包装类自带有parse方法 Integer i = 315; int i1 = Integer.parseInt("315"); System.out.pri ...
- Django中关于Manager的使用
首先介绍一下 manager 的使用场景,比如我们有一些表级别的,需要重复使用的功能,都可以使用 manager 来实现. 比如我们在前面的笔记中介绍的 model 的 create().update ...
- libmodbus 源码分析转
记录一下,这位大神分析的很到位,值得膜拜! < libmodbus协议栈1--Linux下详细移植步骤(配置.生成) > < libmodbus协议栈2-- Linux下 modbu ...
- 复制 GUI 状态
FORM frm_set_pf_status USING pt_extab TYPE slis_t_extab. *--·状态 'STANDARD'是从系统功能组 KKBL GUI状态下的" ...
- Docker 安装流程-CentOS
0.安装Docker Docker 分为 CE 和 EE 两大版本.CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月. Docker CE 分为 s ...
- Flink生产数据到Kafka频繁出现事务失效导致任务重启
在生产中需要将一些数据发到kafka,而且需要做到EXACTLY_ONCE,kafka使用的版本为1.1.0,flink的版本为1.8.0,但是会很经常因为提交事务引起错误,甚至导致任务重启 kafk ...
- Lua监听事件观察者模式(多个监听者监听)
fireEvent 产生事件,创建协程分发(在registerEventListener注册过的事件中通过事件名字找到对应的信息,然后执行对应模块的OnEvent函数),多个地方都注册了同一个事件的话 ...
- 27 python 发送短信
腾讯云短信服务,来进行发送短信. 注册账号 开通服务 + 缴费 (实名.企业认证,公众号) API服务.SDK服务 API,接口 import requests # 在此之前还会处理签名和加密的工作量 ...
- sequelize的创建接口以及模糊查询
第一步: 在routes里面复制index.js更改为xxx.js(例如arctile.js) res.json()返回的就是json文件 第二步: 在views里app.js引用路由 第三步:查找数 ...