正則表達式中使用變量


  首先引入一道題:完成下面的函數。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM