var str = "select  * from table_name where id = :id and name  = :name";
var data = {
id: "123",
name: "小二"
};
for (var n in data)
str = str.replace(":"+n,"'"+data[n]+"'");
alert(str);

解决方案 »

  1.   

    var str='select  * from table_name where id = :id and name  = :name';
    var obj={
      id :'123',
      name : '小二'
    };
    function xx(str,obj){
      for(var i in obj){
        if(obj.hasOwnProperty(i)){
          var reg=new RegExp(':'+i,'g');
          str=str.replace(reg,"'"+obj[i]+"'");
        }
      }
      return str;
    }
    var d=xx(str,obj);
    d
      

  2.   

    alert('select  * from table_name where id = :id and name  = :name'.replace(/:id/,123).replace(/:name/,'小二'));
      

  3.   


    var format = function(tpl, data){
        return tpl.replace(/\:(\w+)(\s+|$)/g, function(a, b, c){
            b = b && data[b];
            if(b && b.constructor == String) return "'" + b + "'" + c;
            //这里可以根据自己的需求增加逻辑判断,主要是值类型
            return b + c;
        });
    };
    alert(format("select * from table_name where id = :id and name  = :name", {id:123, name:'123'}));
    alert(format("select * from table_name where id = :id and name  = :name and no = :no", {id:123, name:'123', no:'abc'}));
      

  4.   

    s = 'select  * from table_name where id = :id and name  = :name';
    id = 123;
    name = "小二";s = s.replace(/:(\w+)/g, function(a, b) {
      try {
        return "'" + eval(b) + "'";
      } catch(e) {
        return a;
      }
    }); 
    alert(s);
      

  5.   


    看到这个回复,突发灵感,终于知道for in的实际用处。以前总感觉for in是循环对象的属性,不能像java中的foreach那样好用,看到这个回复,感觉这样也很好用!给你32个赞!
      

  6.   

    for in 存在效率问题var str = "select  * from table_name where id = :id and name  = :name";
    var data = {
        id: "123",
        name: "小二"
    },
    hash = [ "id" , "name" ];
    for (var i = hash.length; i--; )
        str = str.replace(":"+hash[ i ] ,"'"+data[ hash[ i ]  ]+"'");
    alert(str);如果逻辑一直  2个replace搞定吧
      

  7.   

        s = 'select  * from table_name where id = :id and name  = :name';
        id = 123;
        name = "小二";
        s = s.replace(/:[a-z]+\b/g, function(a) { return window[a.substring(1)] ? "'"+window[a.substring(1)]+"'" : a});
        alert(s);