js中正則短小精悍,斷言不匹配,匹配可捕獲,捕獲能引用,全局都來一次。
問題
已知含有n個變量的字符串,要求將變量替換爲對應的值,如title=‘jack’
<div> <p> {$no}</p> <p> {$title}</p> </div>
思路
- 定義正則查找
$
字符串變量 - 構建變量鍵與變量值的映射對象
- 使用原生 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
方法,避免過多使用循環,巧妙使用對象鍵值對映射特性,實現值替換。
正則括號內以問號爲前導是爲斷言,用於輔助匹配,而匹配是助力捕獲,捕獲通常是爲了引用。