一个简单的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"

 

时间: 2024-10-10 03:00:23

一个简单的stringFormat的相关文章

一个简单的主机管理模拟程序

最近写的一个小练习,主要是把前面学的东西整合一下.写了一个简单的主机管理界面,主要是练习以下知识点: Session和Cookie进行登录验证(装饰器) 数据库的基本操作 (单表,1对多,多对多) Form的简单使用实现验证 Bootstrap模板写个简单界面 自定义分页 信号,中间件,CSRF,模板语言,JavaScript,AJAX等等 界面比较low,毕竟不是专业的. 附件里面是Django的源代码,3个文件放在一起winrar解压就可以打开

Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)

[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Windows 操作系统中,利用微软 Visual Studio 2005 编译生成 Libevent 2.0.10 静态链接库,并利用 Libevent 静态链接库,实现一个简单的 HTTP Web服务器程序:httpd.exe. 假设 Visual Studio 2005 的安装路径为“D:\Program

完成一个简单的时间片轮转多道程序内核代码

王康 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 分别是1 存储程序计算机工作模型,cpu执行程序的基础流程: 2 函数调用堆栈:各种寄存器和存储主要是为了指令的传取值,通过eip,esp,eax,ebp和程序内存的分区,搭配push pop call return leave等一系列指令完成函数调用操作. 3 中断:多道批程序! 在复习一下上一讲的几个重要指令

一个简单的税利计算器(网页版)

嗯嗯,做一个简单的网页版的税率计算器,功能比较简单,但是相对比较实用.因为参考了一些其他作品,所以在计算汇率的时候习惯性的是以美元做单位.具体的功能有着较为详细的标注.仅供大家学习参考下. <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>JavaScript Loan Calculator</title>

利用JSP编程技术实现一个简单的购物车程序

实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP中数据库编程方法: 二.实验要求 : 利用JSP编程技术实现一个简单的购物车程序,具体要求如下. (1)用JSP编写一个登录页面,登录信息中有用户名和密码,分别用两个按钮来提交和重置登录信息. (2)编写一个JSP程序来处理用户提交的登录信息,如果用户名为本小组成员的名字且密码为对应的学号时,采用J

用L脚本语言开发一个简单的局域网聊天程序

#scp #这是一个简单的局域网聊天程序的例子 定义:字符串,string1 定义:字符串,string2 #addr1是对方的地址 #addr2是自己的地址 #如果addr1和addr2相同,就是自己和自己聊天 定义:地址,addr1,127.0.0.1,27015 定义:地址,addr2,127.0.0.1,27015 定义:整数,字节数,0 #在自己的UDP端口上监听 定义:网络连接,conn2,UDP 监听:conn2,addr2 #连接对方的UDP端口 定义:网络连接,conn1,UD

一个简单的Qt程序分析

本文概要:通过一个简单的Qt程序来介绍Qt程序编写的基本框架与一些Qt程序中常见的概念 #include <QApplication> #include <QPushButton> int main(int argc, char *argv[]) { QApplication app(argc, argv); QPushButton *button = new QPushButton("Quit"); QObject::connect(button, SIGNA

线上一个简单检测Ping状态的邮件报警脚本

Step1.安装sendmail来发邮件 # yum -y install sendmail # /etc/init.d/sendmail start # chkconfig sendmail on Step2.安装邮件客户端 # yum -y install mutt 2.1添加发件人信息,如下 # vim /etc/Muttrc set charset="utf-8"           #设置发邮件编码 set envelope_from=yes set rfc2047_para

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&