如何将Javascript返回引用键或函数?

时间:2010-12-07 14:47:06

标签: javascript regex backreference

<script type='text/javascript'>

 // I have template and info
 var img_template = "<img src='{src}' width='{width}' height='{height}' title='{title}' />";
 var img_info = {
  src : 'http://myimage.com/img.jpg',
  width: '100px',
  height: '100px',
  title: 'My Image'
 }

 // I want to put info to template but It's not work.
 // How should I do ?
 var my_image = img_template.replace(/{(.+?)}/g, img_info['$1']);

</script>

4 个答案:

答案 0 :(得分:4)

使用替换功能:

<script type='text/javascript'>
 var img_template = "<img src='{src}' width='{width}' height='{height}' title='{title}' />";
 var img_info = {
  src : 'http://myimage.com/img.jpg',
  width: '100px',
  height: '100px',
  title: 'My Image'
 }

 var my_image = img_template.replace(/{(.+?)}/g, function(a,b){
      return img_info[b];
 });
</script>

答案 1 :(得分:1)

var my_image = img_template.replace(/{(.+?)}/g, function(m,v){return img_info[v];});

示例http://www.jsfiddle.net/gaby/3Lu4h/

有关使用function as a parameter to the replace method

的更多信息

答案 2 :(得分:0)

var my_image = img_template.replace(/{(.+?)}/g, function(match, group1){
  return img_info[group1];
});

答案 3 :(得分:0)

您需要replace()的回调函数。

var img_template = "<img src='{src}' width='{width}' height='{height}' title='{title}' />";
var img_info = {
  src : 'http://myimage.com/img.jpg',
  width: '100px',
  height: '100px',
  title: 'My Image'
};

// callback function will be executed for each match
var my_image = img_template.replace(/{([^}]+)}/g, function(match, group1) {
  // return lookup value or the empty string
  return img_info[group1] || "";
});

或者,以可重复使用的形式:

function HtmlTemplate(html) {
  this.template = html;
  this.render   = function(info) {
    return this.template.replace(/{([^}]+)}/g, function(match, group1) {
      return info[group1] || "";
    });
  };
}

var imgTemplate = new HtmlTemplate("<img src='{src}' width='{width}' height='{height}' title='{title}' />");

// later

var img = imgTemplate.render(img_info);