UNPKG

@ali-i18n-fe/dada-component

Version:
71 lines (56 loc) 1.44 kB
const replaceFromTemplate = (targetData, template) => { const reg = /\${(.+?)}/g; let regStr = template; let targetStr = targetData; let regResult = null; const varNames = []; const vars = []; // eslint-disable-next-line no-cond-assign while ((regResult = reg.exec(template))) { const [str, varName] = regResult; const [strNeed, reset] = regStr.split(str); regStr = reset; const [strBefore, ...strAfter] = targetStr.split(strNeed); targetStr = strAfter.join(strNeed); if (strBefore) { vars.push(strBefore); } varNames.push(varName); } if (targetStr) { vars.push(targetStr); } if (regStr && vars[vars.length - 1]) { vars[vars.length - 1] = vars[vars.length - 1].replace(regStr, ""); } const result = {}; varNames.forEach((value, key) => { result[value] = vars[key]; }); return result; }; /* replaceFromTemplate( '##@@@ocms-page-38174.op-695679##ocms-page@@@##Weekly Deals', '##@@@${MedusaKey}##${MedusaAPPName}@@@##${MedusaEnValue}' ); ==> { MedusaKey: 'ocms-page-38174.op-695679', MedusaAPPName: 'ocms-page', MedusaEnValue: 'Weekly Deals' } */ /* replaceFromTemplate( 'tr(s-wb-subaccount@manageSubAccounts#sssss)', 'tr(${MedusaKey}@${MedusaAPPName}#${MedusaEnValue})' ); => { MedusaKey: 's-wb-subaccount', MedusaAPPName: 'manageSubAccounts', MedusaEnValue: 'sssss' } */ exports.replaceFromTemplate = replaceFromTemplate;