george-es / Blog

My Blog
0 stars 0 forks source link

String.prototype.replace() 方法妙用 #49

Open george-es opened 4 years ago

george-es commented 4 years ago

replace + 正则可以便捷的去替换文本

将 aaabbbccc 变成

<span class="aaa">aaa</span>
<a class="bbb">bbb</a>
<div class="ccc">ccc</div>
const str = 'aaabbbccc'
const aaa_reg = /aaa/g
const bbb_reg = /bbb/g
const ccc_reg = /ccc/g

str
.replace(aaa_reg, '<span class="aaa">$&</span>')
.replace(bbb_reg, '<a class="bbb">$&</a>')
.replace(ccc_reg, '<div class="ccc">$&</div>')

$& 表示插入匹配的子串,replace 虽然链式调用,但要知道的是,它每次修改的都是基于最原始的 str

也可以理解为

str.replace(aaa_reg, '<span class="aaa">$&</span>')
str.replace(bbb_reg, '<a class="bbb">$&</a>')
str.replace(ccc_reg, '<div class="ccc">$&</div>')

而每次的 $& 或 $1 都是针对当前的 str