JScript實現的一個String.Format方法

來源:互聯網
上載者:User
    在.NET Framework的BCL類String中,有一個很有用的靜態方法String.Format。當我們在輸出一個需要由多個變數條目來組成的字串時,非常的有用。特別是在對多語言支援時,使用Format方法來顯示更加有價值。為了方便指令碼編程,下面實現了一個JScript版的Format方法。

    BCL中的String.Format()是一個變參數的方法,第一個參數為格式化字串,從第二個參數開始為格式化條目中的替換值。由於JavaScript天生就支援任意參數個數,所以可以很自然的實現一個非常sexy的Format方法。

    StringHelper.Format()方法原始碼如下:

 // StringHelper.Format('{0}, {2}, {1}', 'abc', 'def', 'ghi');
 // return "abc, ghi, def".
 StringHelper.Format = function(format)
 {
    if ( arguments.length == 0 )
    {
        return '';
    }
    if ( arguments.length == 1 )
    {
        return String(format);
    }

    var strOutput = '';
    for ( var i=0 ; i < format.length-2 ; )
    {
        if ( format.charAt(i) == '{' && format.charAt(i+1) != '{' )
        {
            var token = format.substr(i);
            var index = String(token.match(/\d+/));
            if ( format.charAt(i+index.length+1) == '}' )
            {
                var swapArg = arguments[Number(index)+1];
                if ( swapArg )
                {
                    strOutput += swapArg;
                }
                i += index.length+2;
            }
        }
        else
        {
            if ( format.charAt(i) == '{' && format.charAt(i+1) == '{' )
            {
                strOutput += format.charAt(i);
                i++
            }
            strOutput += format.charAt(i);
            i++;
        }
    }
    strOutput += format.substr(i);
    return strOutput.replace(/{{/g, '{').replace(/}}/g, '}');
 }

    開始的時候我使用Regular Expression來替換,結果發現問題巨多,多到我只能放棄了,老老實實的遍曆替換。如果要保留"{"或"}",使用double來轉義,和BCL類庫String.Format用法完全一致。

    使用如下測試代碼:

  alert(StringHelper.Format('{0}{0}, {{2}}, {{1}}', 'abc', 'def', 'ghi')); 

  alert(StringHelper.Format('{0}, {{2}}, {1}', 'abc', 'def', 'ghi')); 

  alert(StringHelper.Format('{{0}}\r\n, {2}\r\n, {1}', 'abc', 'def', 'ghi')); 

  alert(StringHelper.Format('{0}{0}{{00}{0}, {{1}}, {{2}}', 'abc', 'def'));

    結果為:

 No.1 alert: abcabc, {2}, {1}

 No.2 alert: abc, {2}, def

 No.3 alert: {0}
                , ghi
                , def

 No.4 alert: abcabc{00}abc, {1}, {2}

    您還有更好更高效的實現辦法嗎?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.