Javascript:类似于带有属性名称的string.format

时间:2015-06-16 08:41:22

标签: javascript regex string-formatting

我想创建一个方法,我可以通过格式字符串传递记录集(可以很容易地成为一般对象)来按名称替换值。我在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/

我没有通过一个物体!

2 个答案:

答案 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;
}

http://jsbin.com/tumobohelo/edit?js,console

答案 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,这可能会有所帮助。