5.1 Replace - quan1997ap/angular-app-note GitHub Wiki
1. replace all
replaceAll(sourceStr, replaceStr, replaceWith) {
/*
Note:
\ is a escape character: this.replaceAll( '11111111111\\111 ', "\\\\", '2');
*/
var regex = `${replaceStr}`;
var re = new RegExp(regex, "ig"); // g (global) tìm tất cả , i : (insensitive) không phân biệt chữ hoa chữ thường
return sourceStr.replace(re, replaceWith);
}
2. replace all nhiều biến cùng 1 lúc
CHÚ Ý : Chỉ áp dụng thay thế các biến 1 kí tự (sortKey: 'a'). Có 2 chiều.
- revert = true : tr_Backtest_HistoryLogCheck_AverageAlert => a
- revert = false : a => tr_Backtest_HistoryLogCheck_AverageAlert
2.1 KHai báo danh sách biến
varDefinitions = [
{
name: 'Detect type',
key: 'detect_type',
sortKey: 'a'
},
{
name: 'Simulation.Manual Pass',
key: 'tr_Simutation_Manual_pass',
sortKey: 'b'
},
{
name: 'Simulation.Manual Total',
key: 'tr_Simutation_Manual_total',
sortKey: 'c'
},
{
name: 'SIMULATION.ThirdParty Pass',
key: 'tr_Simutation_ThirdParty_pass',
sortKey: 'd'
},
{
name: 'SIMULATION.ThirdParty Total',
key: 'tr_Simutation_ThirdParty_total',
sortKey: 'e'
},
{
name: 'BACKTEST.ExitingEc Pass',
key: 'tr_Backtest_ExittingEvident_pass',
sortKey: 'f'
},
{
name: 'BACKTEST.ExitingEc Total',
key: 'tr_Backtest_ExittingEvident_total',
sortKey: 'g'
},
{
name: 'AVERAGE ALERT CHECK',
key: 'tr_Backtest_HistoryLogCheck_AverageAlert',
sortKey: 'h'
},
{
name: 'INCIDENT DISCOVERED',
key: 'tr_Backtest_HistoryLogCheck_IncidentDiscovered',
sortKey: 'k'
}
]
2.2 Hàm thay thế
replaceFormula(formula, revert?: boolean) {
/*
revert = true : tr_Backtest_HistoryLogCheck_AverageAlert => a
revert = false : a => tr_Backtest_HistoryLogCheck_AverageAlert
*/
if (revert == true) {
/*
Thay thế nhiều biến cùng 1 lúc trong string
https://stackoverflow.com/questions/16576983/replace-multiple-characters-in-one-replace-call
[abc] chỉ cho phép 1 kí tự => short key chỉ được phép đặt kí tự đơn
var chars = { 'a': '11', 'b': '22', 'c': '33' };
var s = 'aabbcc';
s = s.replace(/[abc]/g, m => chars[m]);
console.log(s);
*/
let mapingChar = new Object({});
let regex = this.varDefinitions.map(varDef => varDef.sortKey).toString();
regex = this.replaceAll(regex, ',', '');
var re = new RegExp(`[${regex}]`, "ig");
this.varDefinitions.forEach(varDef => mapingChar[varDef.sortKey] = varDef.key);
return formula.replace(re, m => mapingChar[m]);
} else {
let formulaReplace = formula;
this.varDefinitions.forEach(varDef => {
formulaReplace = this.replaceAll(formulaReplace, varDef.key, varDef.sortKey);
})
return formulaReplace;
}
}