纯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/ ...
随机推荐
- windows环境下部署项目
有些时候,我们的项目不得不用windows服务器部署,但是需要注意的是,windows服务是无法开启多进程处理请求的. 本文介绍如何在windows上部署flask项目,应用 apache + mod ...
- 图像bayer格式介绍
图像bayer格式介绍 https://zhuanlan.zhihu.com/p/72581663
- Qt excel操作相关
#include <QDebug> #include <QAxObject> #include <QStandardPaths> #include <QFil ...
- Idea下载指南之几个选项
通常我们在下载idea等一些图形编译器时,都会有很多选项供您选择,下面我们来看下这几个英文选项吧. create desktop Shortcut Update Path variable(resta ...
- WPF 后台实现按数字键滚动DataGrid 当前选中项
最近遇到个项目,设备上没有鼠标,界面为全屏的一个DataGrid,需要实现按小键盘的0和1让DataGrid的当前选中行进行上下滚动 起到重要参考的是: https://blog.csdn.net ...
- CompletableFuture的使用
1 List<List<String>> subList = CommonUtils.splitList(pendingIds, 500);private static fin ...
- Java流程控制之Scanner的进阶使用
Scanner的进阶使用 import java.util.Scanner; public class Demo04 { public static void main(String[] args) ...
- 暑假学习6 hdfs shell命令
命令行操作:cli Hadoop的命令shell : Hadoop fs -ls file: 操作 本地的文件系统 hadoop fs -ls hdfs://nod ...
- 递归分批次插入数据(An I/O error occurred while sending to the backend报错解决方案)
//递归插入public void add(List<Object> all, long start, long limit){ //截取 List<Object> colle ...
- Swift中 堆(heap)和栈(stack)的区别
1.内存空间分为堆空间和栈空间 2.堆->引用类型(对象.函数.闭包) 栈->值类型(结构体.枚举.元组) 3.值类型赋值->深拷贝 引用类型赋值->浅拷贝 let a = ...