JavaScript基于replace+正則實(shí)現(xiàn)ES6的字符串模版功能
本文實(shí)例講述了JavaScript基于replace+正則實(shí)現(xiàn)ES6的字符串模版功能。分享給大家供大家參考,具體如下:
采用拼接字符串的形式,將 JSON 數(shù)據(jù)嵌入 HTML 中。開始時代碼量較少,暫時還可以接受。但當(dāng)頁面結(jié)構(gòu)復(fù)雜起來后,其弱點(diǎn)開始變得無法忍受起來:
書寫不連貫。每寫一個變量就要斷一下,插入一個 + 和 “。十分容易出錯。
無法重用。HTML 片段都是離散化的數(shù)據(jù),難以對其中重復(fù)的部分進(jìn)行提取。
無法很好地利用 標(biāo)簽。這是 HTML5 中新增的一個標(biāo)簽,標(biāo)準(zhǔn)極力推薦將 HTML 模板放入 標(biāo)簽中,使代碼更簡潔。
replace+正則實(shí)現(xiàn)
項目剛開始用的數(shù)據(jù)拼接
function formatString() {
if (arguments.length === 0)
return null;
var str = arguments[0];
for (var i = 1; i < arguments.length; i++) {
var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
str = str.replace(re, arguments[i]);
}
return str;
},
第一個參數(shù)為需要渲染的數(shù)據(jù)模板,其他參數(shù)為數(shù)據(jù):
formatString('{0},My name is {1}', 'everyMan', '吳孔云')
這種后期維護(hù)較麻煩,一旦更改順序,都需要更改~~就跟函數(shù)需要接收一大串參數(shù)一樣,我們盡量寫成對象的形式,
var myObject = maker(f,l,m,c,s);//不建議寫法
var myObject = maker({//建議寫法
first : f,
last: l,
state:s,
city:c
});
在網(wǎng)上搜索看到一個例子,可以類似實(shí)現(xiàn)ES6的字符串模版形式,博客是一個高中生寫的,戳鏈接 。
function render(template, context) {
//被轉(zhuǎn)義的的分隔符 { 和 } 不應(yīng)該被渲染,分隔符與變量之間允許有空白字符
var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g;
return template.replace(tokenReg, function (word, slash1, token, slash2) {
//如果有轉(zhuǎn)義的\{或\}替換轉(zhuǎn)義字符
if (slash1 || slash2) {
return word.replace('\\', '');
}
// 切割 token ,實(shí)現(xiàn)級聯(lián)的變量也可以展開
var variables = token.replace(/\s/g, '').split('.');
var currentObject = context;
var i, length, variable;
for (i = 0, length = variables.length; i < length; ++i) {
variable = variables[i];
currentObject = currentObject[variable];
// 如果當(dāng)前索引的對象不存在,則直接返回空字符串。
if (currentObject === undefined || currentObject === null) return '';
}
return currentObject;
})
}
String.prototype.render = function (context) {
return render(this, context);
};
"{greeting}! My name is { author.name }.".render({
greeting: "Hi",
author: {
name: "hsfzxjy"
}
});
// Hi! My name is hsfzxjy.
擴(kuò)展:ES6字符串模版API
ES6引入了一種新型的字符串字面量語法,我們稱之為模板字符串(template strings)。除了使用反撇號字符 ` 代替普通字符串的引號 ' 或 ” 外,它們看起來與普通字符串并無二致。
var a = 'kenny'
`my name is ${a}` //"my name is kenny"
可以用bable編譯成ES5。
PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:
JavaScript正則表達(dá)式在線測試工具:
http://tools.jb51.net/regex/javascript
正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ECMAScript6(ES6)入門教程》、《JavaScript正則表達(dá)式技巧大全》、《JavaScript字符與字符串操作技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章
js如何查找json數(shù)據(jù)中的最大值和最小值方法
這篇文章主要介紹了js如何查找json數(shù)據(jù)中的最大值和最小值方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
基于JavaScript實(shí)現(xiàn)網(wǎng)紅太空人表盤的完整代碼
這篇文章主要介紹了基于JavaScript實(shí)現(xiàn)網(wǎng)紅太空人表盤的完整代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
JavaScript獲取對象在頁面中位置坐標(biāo)的方法
這篇文章主要介紹了JavaScript獲取對象在頁面中位置坐標(biāo)的方法,涉及JavaScript操作頁面元素屬性的相關(guān)技巧,需要的朋友可以參考下2016-02-02
用Fundebug插件記錄網(wǎng)絡(luò)請求異常的方法
這篇文章主要介紹了用Fundebug插件記錄網(wǎng)絡(luò)請求異常的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02
javascript中函數(shù)的寫法實(shí)例代碼詳解
這篇文章主要介紹了javascript中函數(shù)的寫法 ,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-10-10
JavaScript使用forEach()與jQuery使用each遍歷數(shù)組時return false 的區(qū)別
這篇文章主要介紹了JavaScript使用forEach()與jQuery使用each遍歷數(shù)組時return false 的區(qū)別,非常不錯,需要的朋友可以參考下2016-08-08

