javascript的stringFormat函数实现
写一个简单的stringFormat来给自己用
function stringFormat(format, args) {
var formatData;
if (arguments.length == 2 && args && typeof(args) == "object") {
formatData = args;
} else {
formatData = Array.prototype.slice.call(arguments, 1);
}
var pattern = [];
for (var key in formatData) {
pattern.push("\\{" + key + "\\}");
}
if (!pattern.length) {
return format;
}
pattern = pattern.join("|");
return format.replace(new RegExp(pattern, "img"),
function(matchValue, index, inputString) {
var key = matchValue.slice(1, -1);
return formatData[key];
});
}
做些修改,让代码更短一些
function stringFormat() {
var data, args = arguments,
arr = [],
i = 0;
data = (args.length == 2 && args[1] && typeof(args[1]) == "object") ? args[1] : Array.prototype.slice.call(args, 1);
for (arr[i++] in data);
return arr.length ? args[0].replace(new RegExp("\\{" + arr.join("\\}|\\{") + "\\}", "img"),
function(val) {
return data[val.slice(1, -1)];
}) : args[0];
}
压缩
function stringFormat(){var e,t=arguments,n=[],r=0;e=t.length==2&&t[1]&&typeof t[1]=="object"?t[1]:Array.prototype.slice.call(t,1);for(n[r++]in e);return n.length?t[0].replace(new RegExp("\\{"+n.join("\\}|\\{")+"\\}","img"),function(t){return e[t.slice(1,-1)]}):t[0]}
示例1
stringFormat(); // undefined
stringFormat("1 {0} 3 {1}"); //"1 {0} 3 {1}"
stringFormat("1 {0} 3 {1}", 2); //"1 2 3 {1}"
stringFormat("1 {0} 3 {1}", 2, 4); //"1 2 3 4"
stringFormat("1 {0} 3 {1}", [2, 4]); //"1 2 3 4"
stringFormat("1 {0} 3 {1}", [2]); //"1 2 3 {1}"
stringFormat("1 {a} 3 {b}", { a: 2, b: 4}); //"1 2 3 4"
stringFormat("1 {a} 3 {b}", { a: 2}); //"1 2 3 {b}"
stringFormat("1 {a} 3 {b}", { a: 2, b: 4},1, 2); //"1 {a} 3 {b}"
stringFormat("1 {0} 3 {1}", [2, 4], 4, 5); //"1 2,4 3 4"
```
##示例2
```
//多行的写法 加 '\'
var mLine = "My name is {name},I am {age}.\
My name is {name},I am {age}.\
My name is {name},I am {age}."; stringFormat(mLine, { name: 'lranye', age: 12});
/*结果:
My name is lranye,
I am 12.My name is lranye,
I am 12.My name is lranye,
I am 12.
*/ //执行:
stringFormat(mLine, { name: '{age}', age: 12});
/*结果:
My name is { age},
I am 12.My name is {age},
I am 12.My name is { age},
I am 12.
*/
注意在
javascript字符串中要表示斜杠'\', 则要用转义符'\' 写成 '\\'
比如 '\' 对应要写成 '\\', '\\' 对应要写成'\\\\'
如果如下声明并赋值一个变量str
var str="1\2\3\4";
实际上 str值为"1234"
正确的表示方式为str="1\\2\\3\\4"
javascript的stringFormat函数实现的更多相关文章
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- 用javascript 写个函数返回一个页面里共使用了多少种HTML 标签
今天我无意间看到一个面试题: 如何用javascript 写个函数返回一个页面里共使用了多少种HTML 标签? 不知你看到 是否蒙B了,如果是我 面试,肯定脑子嗡嗡的响.... 网上搜了搜也没有找到答 ...
- JavaScript基础学习-函数及作用域
函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...
- JavaScript 基础回顾——函数
在JavaScript中,函数也是一种数据类型,属于 function 类型,所以使用Function关键字标识函数名.函数可以在大括号内编写代码并且被调用,作为其他函数的参数或者对象的属性值. 1. ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
- javascript立即执行函数
javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花;当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( ...
- JavaScript 立即执行函数
js中(function(){…})()立即执行函数写法理解 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法 ...
- 前端学习 第六弹: javascript中的函数与闭包
前端学习 第六弹: javascript中的函数与闭包 当function里嵌套function时,内部的function可以访问外部function里的变量 function foo(x) { ...
- JavaScript学习09 函数本质及Function对象深入探索
JavaScript学习09 函数本质及Function对象深入探索 在JavaScript中,函数function就是对象. JS中没有方法重载 在JavaScript中,没有方法(函数)重载的概念 ...
随机推荐
- 在服务器上php执行某些远程函数出错
Warning: imagecreatefromjpeg(): php_network_getaddresses: getaddrinfo failed: Name or service not kn ...
- project euler 16:Power digit sum
>>> sum([int(i) for i in str(2**1000)]) 1366 >>>
- HDU 3501 Calculation 2(欧拉函数)
Calculation 2 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...
- @Scheduled(cron="") spring定时任务时间设置
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素. 按顺序依次为 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数) 月(0~11) 天( ...
- codecomb 2092【课程选择】
题目描述 大学选课总是烦恼着很多人.现在X同学选出了很多备选课,但是有的课程之间是有时间冲突的.X不会分身,自然无法在同一个时间上不同的课.每个课可能有很多备选时间,但是每个课只需要选一个时间上就可以 ...
- c语言中内存对齐问题
在最近的项目中,我们涉及到了“内存对齐”技术.对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”.“内存对齐”应该是编译器的“管辖范围”.编译器为程序中的每个“数据单元”安排在适当的位置上 ...
- LeeCode(Database)-Customers Who Never Order
Suppose that a website contains two tables, the Customers table and the Orders table. Write a SQL qu ...
- vue.js的devtools安装
安装 1.github下载地址:https://github.com/vuejs/vue-devtools 2.下载好后进入vue-devtools-master工程 执行npm install - ...
- sh_脚本语法
介绍: 1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编写脚 ...
- Python高阶函数
在Python中,函数名也是一个变量,可以进行赋值 高阶函数是至少满足下列一个条件的函数: 接受一个或多个函数作为输入 输出一个函数 函数名也可以作为函数参数,还可以作为函数返回值 def f(n) ...