Я пытаюсь придумать какой-нибудь очень многократно используемый код, который будет искать и выполнять подстановку переменных внутри строки.
В приведенном ниже примере строки содержится ссылка $$
на переменную. Формат varname.key
.
Я хочу, чтобы функция subText()
была многоразовой. У меня проблема в том, что repvars
сами могут потребовать замены. Код не закончил замену текста примера, и я прошу его заменить repvars.cr
, вызвав ту же функцию. Это, кажется, через это выключено. Я говорю это, потому что, если я делаю это отдельно в работах.
var exampleText = "A string of unlimited length with various variable substitutions included $$repvars.cr$$";
var repvars = {
cr: 'Copyright for this is $$repvars.year$$',
year: '2019'
}
function subText(text) {
var subVars = findSubs(text);
return makeSubs(text, subVars);
}
function findSubs(theText) {
var subarr = [];
while (theText.indexOf('$$') > -1) {
theText = theText.substring(theText.indexOf('$$') + 2);
subarr.push(theText.substring(0, theText.indexOf('$$')));
theText = theText.substring(theText.indexOf('$$') + 2);
}
return subarr;
}
function makeSubs(text, subs) {
for (var s = 0; s < subs.length; s++) {
var subst = getSubVal(subs[s]);
text = text.split("$$" + subs[s] + "$$").join(subst);
}
return text;
}
function getSubVal(subvar) {
var subspl = subvar.split('.');
switch (subspl[0]) {
default:
return processRepVar(subspl[1]);
}
}
function processRepVar(rvName) {
var data = getRepVarData(rvName);
if(data.indexOf('$$') > -1) {
subText(data);
} else {
return data;
}
}
function getRepVars() {
return repvars;
}
function getRepVarData(key) {
return getRepVars()[key];
}
subText(exampleText);