Javascript:类似于string.format的属性名
我想做一个方法,我可以用格式字符串传递一个记录集(可以很容易地成为一个普通对象),以名称替换值。我找到了另一个答案,所以我几乎做到了: 但它不太管用(我不认为): 注意:我的记录集版本仅为:Javascript:类似于string.format的属性名,javascript,regex,string-formatting,Javascript,Regex,String Formatting,我想做一个方法,我可以用格式字符串传递一个记录集(可以很容易地成为一个普通对象),以名称替换值。我找到了另一个答案,所以我几乎做到了: 但它不太管用(我不认为): 注意:我的记录集版本仅为: function format(str, rs) { return str.replace(/\{\s*([^}\s]+)\s*\}/g, function(m, p1, offset, string) { return rs(p1); //use recordset names a
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
})
}
我希望能够做到这一点,而不必像上面的代码那样迭代对象(或记录集的列)的属性。相反,它会在大括号中查找项目,并尝试在对象属性(或记录集列)中查找它们
或者事实上我是一个白痴,而上面这些确实有效
我没有经过一个物体
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' })
用于花括号
function template(str, data) {
data = data || {};
str.match(/{(.+?)}/g).forEach(function(key) {
str = str.replace(key, data[key.replace('{','').replace('}', '')]);
});
return str;
}
像这样它将所有{name}替换为数据参数中对应的值
template('<div>{{name1}}</div> <span>{{name2}}</span>', { name1: 'value1', name2: 'value2' })
用于花括号
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);