码迷,mamicode.com
首页 > 其他好文 > 详细

一个简单的stringFormat

时间:2016-04-30 23:45:09      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

写一个简单的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]}
View Code

 

示例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"

 

 

一个简单的stringFormat

标签:

原文地址:http://www.cnblogs.com/taliu/p/5449569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!