字符串的替換函數replace日常使用的頻率很是高,format函數一般用來填補佔位符。下面簡單總結一下這兩個函數的用法。前端
replace的用法如:replace(regexp, string|fn);第一個參數都是正則表達式,第二個參數能夠是要替換的字符串,也能夠是帶返回值的函數,它的功能就是拿第二個參數替換匹配的值。正則表達式
1.replace(regexp, string):我想把「樂小天」中的「小」替換成「大」,以下所示。框架
console.log("樂小天".replace(/小/g, "大"));//樂大天
//trim的實現方式 console.log(" 樂小天 ".replace(/(^\s+)|(\s+$)/g, ""));//樂小天
2.replace(regexp, fn);fn這個回調函數能夠有四種參數,第一種參數是匹配regexp的字符串;第二種爲匹配regexp子表達式的字符串(有幾個自表達式,順延對應幾個參數,若是沒有子表達式,則第二個參數爲第三種參數);第三種參數爲regexp匹配字符串在字符串中的索引;第四種參數爲當前調用replace的字符串。less
拿上面trim的實現爲例,它的正則表達式包含兩個子表達式:(^\s+)和(\s+$);因此回調函數應該有5個參數。固然,若是沒有子表達式,則只有三種參數。函數
console.log(" 樂小天 ".replace(/(^\s+)|(\s+$)/g, function(match, matchChild1, matChild2, index, strObj){ console.log("match:" + match + ";"); console.log("matchChild1:" + matchChild1 + ";"); console.log("matChild2:" + matChild2 + ";"); console.log("index:" + index + ";"); console.log("strObj:" + strObj + ";"); return ""; } )); /** match: ; matchChild1: ; matChild2:undefined; index:0; strObj: 樂小天 ; match: ; matchChild1:undefined; matChild2: ; index:11; strObj: 樂小天 ; 樂小天 */
有的時候咱們事先不知道字符串對應位置應該替換成什麼,因此咱們用佔位符「{數字}」在字符串中進行預先佔位,在真正肯定的時候纔將其替換掉。說白了就是將未知的替換字符封裝成參數,讓替換邏輯這個不變的部分與替換參數這個變化部分進行分離。this
1.format實現:spa
//擴展format String.prototype.format = String.prototype.format || function() { var args = arguments; return this.replace(/{(\d+)}/g, function(match, number) { return typeof args[number] != 'undefined' ? args[number] : match; }); }; console.log("{0}是個{1}帥哥!".format('孫悟空', '大'));//孫悟空是個大帥哥!
2.format替換字符在form校驗中用到的比較多,好比前端UI框架MiniUI的校驗對象VType是這麼定義的:prototype
mini.VTypes = { minDateErrorText : "Date can not be less than {0}", maxDateErrorText : "Date can not be greater than {0}", ... };
在返回錯誤信息的時候將對應的邊界值替換掉「{0}」code