我想把如下代码中字符串str中的“sz[*]”替换成数组sz相对应的值,但是在FF和IE中都只能原样输入str。使用String.match方法试了一下正则匹配,提示null,看样子应该是正则没有匹配上。各位前辈能否指点一下这个问题应该怎么处理?谢谢了先!<html>
<script language="javascript">var sz=["1","2","3","4","5"];var str="sz[1]+sz[2]+sz[3]+sz[4]+sz[5]";for(i=0;i<sz.length;i++)var reg="sz\["+i+"\]";//var reg="sz";alert(str.match(reg));str=str.replace(new RegExp(reg,"g"),sz[i]);document.write("\""+str+"\"");</script>
</html>

解决方案 »

  1.   

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head><body>

    <script>
    var sz = ["1","2","3","4","5"],
    str = "sz[0]+sz[1]+sz[2]+sz[3]+sz[4]",
    reg = /sz\[(\d)\]/g;
    str = str.replace(reg, function(){
    return sz[arguments[1]];
    });
    alert(str);
    </script>
    </body>
    </html>
      

  2.   

    简单修改了一下你的代码,你的思路还是蛮清清晰的,楼上真是高手啊,写得这么简明,我和他差远了
    <html>
    <script language="javascript">var sz=["1","2","3","4","5"];var str="sz[1]+sz[2]+sz[3]+sz[4]+sz[5]";for(i=0;i<sz.length;i++)
    {
    var reg="sz\\["+(i+1)+"\\]";//var reg="sz";alert(str.match(reg));str=str.replace(new RegExp(reg,"g"),sz[i]);}
    document.write("\""+str+"\"");
    </script>
    </html>
      

  3.   

    var sz=["0", "1","2","3","4","5"];
        sz.result = "25";var str="{1}+ {2} + {3} + {4} + {5} = '{'{result}'}'";
    function format(temp, params){
       var r = /'\{'|'}'|\{\s*(\w+).*?\}/g;
       var s = temp.replace(r, function(m, m1){   
          if(m == "'{'"){
            return "{";
          }      if(m == "'}'"){
            return "}";
          }     if(m1){ 
            var key = m1;
            var val = params.hasOwnProperty(key)
                    ? String(params[key])
                    : "";
         
            return val;
         }
       
         return m;
      });
      return s;
    }alert(format(str, sz));
      

  4.   

    谢谢楼上的三位了,尤其感谢第一位,最先提供了有效的解决方案。再追问一下,(\d)意思是按数字进行分组,但“sz[arguments[1]]”中为什么只指定“1”就能替换所有元素?这个用法是什么意思?呵呵,不是专业搞JS的,还请您赐教!
      

  5.   

    arguments[1]是第一个分组的值,你运行下面的代码就知道了 var sz = ["1","2","3","4","5"],
                str = "sz[0]+sz[1]+sz[2]+sz[3]+sz[4]",
                reg = /sz\[(\d)\]/g;
            str = str.replace(reg, function(){
                var args = arguments;
                for(var i in args){
                    console.log(i+": "+args[i]);
                }
                return sz[arguments[1]];
            });
            alert(str);