Javascript:类似 string.format 的名称,名称为 属性
Javascript: something like string.format with property names
我想制作一个方法,我可以通过格式字符串传递记录集(可以很容易地成为一个通用对象)以按名称替换值。我在 SO 上找到了另一个几乎做到了的答案:
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/
我不是在传递对象!
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;
}
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,这可能会有帮助。
我想制作一个方法,我可以通过格式字符串传递记录集(可以很容易地成为一个通用对象)以按名称替换值。我在 SO 上找到了另一个几乎做到了的答案:
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/
我不是在传递对象!
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;
}
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,这可能会有帮助。