正则表达式中使用变量

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

/*
        @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;
}

 

转载于:https://www.cnblogs.com/JohnnyChen/archive/2013/01/31/2886815.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值