ある一つの文章を対象に、複数の異なる文字列の置換を行いたことはありませんか?たとえば、メールテンプレートがあって、その内容に置換処理を行う必要があるとか・・・。※特に置換に限った話題ではないのですが。。。
そんなときは、以下の様な処理にすると便利かもしれないと思いましたので紹介します。
①各処理を正規化した形で関数群を作ります。
replace_ABC/replace_DEF
置換前の文字列は、{%ABC%} {%DEF%} としています。
②その関数群をオブジェクト化します。
REPLACE_TEXT_FUNC
(Mapの方が良いのかもしれませんが、個人的にJSON表記が分かりやすいのでそのように記載してます)
③これらを置換前の対象に対して、処理を行う部分を作ります。
replacement_mojiretsu
以上です。全体をclass化していますが、それはどちらでも良いです。
(注意点)class化した場合は、thisが処理関数側で正しく処理できませんので、受け渡しが必要になります。
※以下はサンプルコードですので、動作保証などはありません。自己責任でお願いします。
class Replace_Mojiretsu{
constractor(){
this.ABC = "ABC"
this.DEF = "DEF"
}
REPLACE_TEXT_FUNC = {
"{%ABC%}": this.replace_ABC,
"{%DEF%}": this.replace_DEF,
}
replacement_mojiretsu(textdata){
if(!textdata) return "" ;
let res_data = textdata ;
for(let [key,func] of Object.entries(this.REPLACE_TEXT_FUNC)){
res_data = res_data.replace(key,func(this)) ;
}
return res_data ;
}
// {%ABC%}
replace_ABC(self){
let res_data = self.ABC
return res_data ;
}
// {%DEF%}
replace_DEF(self){
let res_data = self.DEF
return res_data ;
}
}