Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:类似于string.format的属性名_Javascript_Regex_String Formatting - Fatal编程技术网

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);