@ali-i18n-fe/dada-component
Version:
71 lines (56 loc) • 1.44 kB
JavaScript
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;