我想创建一个方法,我可以通过格式字符串传递记录集(可以很容易地成为一般对象)来按名称替换值。我在SO上找到了另外一个答案:https://stackoverflow.com/a/2534828/359135
function format(str, obj) {
return str.replace(/\{\s*([^}\s]+)\s*\}/g, function(m, p1, offset, string) {
return obj[p1]
})
}
但它不太有用(我不这么认为):http://jsfiddle.net/9Jpkv/24/
注意:我的记录集版本只是:
function format(str, rs) {
return str.replace(/\{\s*([^}\s]+)\s*\}/g, function(m, p1, offset, string) {
return rs(p1); //use recordset names accessors instead of object properties
})
}
我希望能够在不迭代对象(或记录集的列)的属性的情况下执行此操作,就像上面的代码几乎要设法做的那样。相反,它会花大括号之间的项目并试图在对象属性(或记录集列)中找到它们
或者实际上我是一个白痴,上面确实有效!:http://jsfiddle.net/9Jpkv/26/
我没有通过一个物体!
答案 0 :(得分:3)
function template(str, data) {
data = data || {};
Object.keys(data).forEach(function(key) {
str = str.replace(new RegExp('{{' + key + '}}', 'g'), data[key]);
});
return str;
}
喜欢这个? - 它将所有{{name}}替换为数据参数
中的对应值template('<div>{{name1}}</div> <span>{{name2}}</span>', { name1: 'value1', name2: 'value2' })
http://jsbin.com/kefazajude/edit?js,console
或
function template(str, data) {
data = data || {};
str.match(/{{(.+?)}}/g).forEach(function(key) {
str = str.replace(key, data[key.replace('{{','').replace('}}', '')]);
});
return str;
}
http://jsbin.com/baxuyateme/edit?js,console
代表大括号
function template(str, data) {
data = data || {};
str.match(/{(.+?)}/g).forEach(function(key) {
str = str.replace(key, data[key.replace('{','').replace('}', '')]);
});
return str;
}
答案 1 :(得分:2)
String.format = function() {
var theString = arguments[0];
for (var i = 1; i < arguments.length; i++) {
var regEx = new RegExp("\\{" + (i - 1) + "\\}", "gm");
theString = theString.replace(regEx, arguments[i]);
}
return theString;
}
使用:
var string = String.format('{0}-{1}-{2}', string1, string2, string3);
你应该看看JavaScript equivalent to printf/string.format,这可能会有所帮助。