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;

    }
  }