筆試之 模板變量替換

js中正則短小精悍,斷言不匹配,匹配可捕獲,捕獲能引用,全局都來一次。

問題

已知含有n個變量的字符串,要求將變量替換爲對應的值,如no=5,no=5,title=‘jack’

<div> <p> {$no}</p> <p> {$title}</p> </div>

思路

  1. 定義正則查找$ 字符串變量
  2. 構建變量鍵與變量值的映射對象
  3. 使用原生 replace 函數進行正則替換,避免循環

實現

str = "<div> <p> {$no}</p> <p> {$title}</p> </div>"
// 1. 創建正則實例
var re = /(?<=\{)(\$\w+)(?=\})/g
// 2. 構建替換對象
var o = {'no':5, 'title':'jack'}
// 3.執行替換
var res = str.replace(re, m => o[m.substr(1)])
// 4.測試
console.log(str)
console.log(res)

效果

<div> <p> {$no}</p> <p> {$title}</p> </div>
<div> <p> {5}</p> <p> {jack}</p> </div>

小結

全局正則,使用了前後向斷言,中間匹配捕獲。
原生replace方法,避免過多使用循環,巧妙使用對象鍵值對映射特性,實現值替換。
正則括號內以問號爲前導是爲斷言,用於輔助匹配,而匹配是助力捕獲,捕獲通常是爲了引用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章