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中,没有方法(函数)重载的概念 ...
随机推荐
- 各种浏览器的agent信息(IE Chrome Safari Firefox)
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/53 ...
- shell脚本练习(短路练习)
#!/bin/bash #By Spinestars#2013-11-11#This is a lvsnap of auto-create Help(){ echo "Usage: ---d ...
- re模块
Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能 ...
- Pubwin服务端重装(安装)教程
此博文已移至爬不稳独立博客:www.pubwin2009.net传送门:http://www.pubwin2009.net/index.php/post/6.html 一,卸载原来服务端和数据库. 1 ...
- 纯js实现积木(div)拖动效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- DEDECMS织梦全站动态化访问(包括自由列表freelist)及发布内容时自动动态化设置
DEDECMS织梦 - 全站已有内容全部设置为动态化访问(包括自由列表freelist),以及发布内容时自动为动态化,设置分为三个步骤: 1.将所有文档设置为“仅动态”:执行以下mysql语句:upd ...
- 使用Calendar增加日期
/** * @Description: 当前日期加上n个月返回long date */ public static long getLongDateAddMonth(int n){ Calendar ...
- 解决 setOnItemClickListener,setOnScrollListener与setOnTouchListener事件冲突问题
代码案例如下: lvXxsdMore.setOnItemClickListener(xxsdMoreListener); //对listView 注册onclick事件 lvXxsdMore.setO ...
- Theme.AppCompat.Light报错
style文件中的Theme.AppCompat.Light报错,Error retrieving parent for item: No resource found that matches th ...
- 【转】如何设置无线路由器的信道以获得最佳WIFI体验?
原文网址:http://jingyan.baidu.com/album/f25ef2546e28e4482c1b8225.html 现在随着移动互联网的发展,移动终端的普及,WIFI越来越必不可少,所 ...