javascript模擬C#格式化字符串
JS 模擬C# 字符串格式化操作
/*** ** 功能: 字符串格式化替換操作 ***/ String.prototype.format = function () { var args = arguments; return this.replace(/\{(\d+)\}/g, function (m, i) { return args[i]; }); }
js實(shí)現(xiàn)類(lèi)似c#中的字符串處理函數(shù)format():
熟悉c#的應(yīng)該知道有format()這么一個(gè)方法,下面就來(lái)模仿一下,在javascript中也實(shí)現(xiàn)此功能。
代碼實(shí)例如下:
String.prototype.format=function(args){ if(arguments.length>0){ var result=this; if(arguments.length==1&&typeof(args)=="object"){ for(var key in args){ var reg=new RegExp("({"+key+"})","g"); result=result.replace(reg, args[key]); } } else{ for(var i=0;i<arguments.length;i++){ if(arguments[i]==undefined){ return ""; } else{ var reg=new RegExp ("({["+i+"]})","g"); result = result.replace(reg, arguments[i]); } } } return result; } else{ return this; } } var fistStr="{0}歡迎您,希望大家能夠得到想要的{1}"; var secondStr="{webName}歡迎您,希望大家能夠得到想要的{favoriate}"; var firstOut=fistStr.format("","東西"); var secondOut=secondStr.format({webName:"",favoriate:"東西"}); console.log(firstOut); console.log(secondOut);
以上代碼是實(shí)現(xiàn)了我們想要的效果,下面介紹一下它的實(shí)現(xiàn)過(guò)程:
一.實(shí)現(xiàn)原理:
原理比較簡(jiǎn)單,這里長(zhǎng)話短說(shuō),具體可以參閱代碼注釋。使用正則表達(dá)式找出要被替換的字符串,然后使用指定的內(nèi)容替換這些字符串即可,在代碼中,指定的內(nèi)容有的是字符串直接量,有的則是對(duì)象的屬性值。
二.代碼注釋:
1.String.prototype.format=function(args){{}),通過(guò)原型對(duì)象為String對(duì)象添加實(shí)例方法format,此方法就是用來(lái)處理字符串。
2.if(arguments.length>0),如果傳遞參數(shù)的個(gè)數(shù)大于0。
3.var result=this,將this的引用賦值給變量result。
4.if(arguments.length==1&&typeof(args)=="object"),用來(lái)判斷傳遞的參數(shù)是否是一個(gè)對(duì)象直接量。
5.for(var key in args),遍歷對(duì)象直接量中的屬性。
6.var reg=new RegExp("({"+key+"})","g"),用來(lái)匹配指定的字符串。
7.result=result.replace(reg,args[key]),用屬性值替換匹配的字符串。
8.else{},如果傳遞的不是一個(gè)對(duì)象直接量。
9.for(var i=0;i<arguments.length;i++),遍歷傳遞的參數(shù)。
10.if(arguments==undefined),如果為undefined,就返回空字符串。
11.var reg=new RegExp("({["+i+"]})","g"),用來(lái)匹配指定的字符串。
12.result=result.replace(reg,arguments),進(jìn)行替換。
13.return result,返回替換后的字符串。
14.return this,如果沒(méi)有傳遞參數(shù),則返回字符串本身。
相關(guān)文章
JavaScript實(shí)現(xiàn)審核流程狀態(tài)的動(dòng)態(tài)顯示進(jìn)度條
對(duì)于有很多流程的東西,我們希望能夠根據(jù)不同的階段,用流程條對(duì)應(yīng)地進(jìn)行顯示,非常直觀,給用戶(hù)帶來(lái)極好的用戶(hù)體驗(yàn),下面小編給大家分享JavaScript實(shí)現(xiàn)審核流程狀態(tài)的動(dòng)態(tài)顯示進(jìn)度條功能,需要的的朋友參考下2017-03-03js實(shí)現(xiàn)符合國(guó)情的日期插件詳解
本篇文章主要介紹了js實(shí)現(xiàn)符合國(guó)情的日期插件的方法與步驟。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01window.location.href和window.open窗口跳轉(zhuǎn)區(qū)別解析
這篇文章主要為大家介紹了window.location.href和window.open 跳轉(zhuǎn)區(qū)別解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07js將當(dāng)前時(shí)間格式化為 年-月-日 時(shí):分:秒的實(shí)現(xiàn)代碼
這篇文章主要介紹了js將當(dāng)前時(shí)間格式化為 年-月-日 時(shí):分:秒主要是使用js的Date()對(duì)象,將系統(tǒng)當(dāng)前時(shí)間格式化為年-月-日 時(shí):分:秒,需要的朋友可以參考下2018-01-01js中通過(guò)split函數(shù)分割字符串成數(shù)組小例子
分割字符串成數(shù)組的方法有很多,不過(guò)使用最多的還是split函數(shù),接下來(lái)為大家介紹下它的具體使用方法,感興趣的朋友可以參考下2013-09-09值得學(xué)習(xí)的bootstrap fileinput文件上傳工具
這篇文章主要分享了一款值得大家學(xué)習(xí)的bootstrap fileinput文件上傳工具,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11