正则表达式中使用变量

  首先引入一道题:完成下面的函数。

/*
        @Description:使用传入的参数格式化字符串string
        用第一个参数替换{0},第二个参数替换{1}...
        @param:string 格式如 this is test {0}{1}
        @param:data 如果data=hello,用该值替换string后的值为  
        this is test hello{1}
        */
        function stringFormat(string,data)
        {
            
        }

  我想到得解决方案是遍历实参,逐个替换模板字符串中相应位置的值。

  

function stringFormat(string,data)
{
    for(var i=1;i<arguments.length;i++)
    {
        string = string.replace(eval('/\\{'+(i-1)+'\\}/g'),arguments[i]);
    }
            
    return string;
}

 

   这里面使用正则表达式有两点需要注意:

   1、正则表达式中使用变量。一定要使用eval将组合的字符串进行转换,不能直接将字符串传入给replace函数。

   2、正则表达式中{}  []等保留符号,前面需要加转义符 \ 标识,而且需要加两个,如果加一个最终组合出的正则表达式为{0},这表示匹配0次,而并不是匹配字符串"{0}"。

 

  另外一种实现方式,不使用eval,正则表达式使用RegExp创建。

function stringFormat(value,reg1){
    
    for(var i=1;i<arguments.length;i++)
    {
        var reg=new RegExp('\\{'+(i-1)+'\\}');

        value=value.replace(reg,arguments[i]);
    }
    
    return value;
}

 

posted @ 2013-01-31 12:55  Johnny.Chen  阅读(26019)  评论(0编辑  收藏  举报