Как я могу искать и заменять строки в Node JS - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь написать некоторый код, который позволяет мне передавать документ в виде строки, которая представляет собой простой текст или HTML и содержит некоторые поля, которые я хочу заменить на личные значения.что-то вроде, например, такого:

Hi {{ first_name | fallback: "there" }},

Я передам имена полей как объекты с одинаковыми именами, поэтому поиск будет простым.Так что я ищу идеи кодирования, как искать часть {{}}, а затем проверять, не является ли поле неизвестным, нулевым или "", и применяет ли оно запасное значение в теге.Это что-то вроде mailmerge, но я не хочу, чтобы это был docx-файл и выводился как word или pdf.я просто хочу обработанную строку, чтобы я мог вернуться к своему почтовому коду и отправить сообщение

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Программа, которая будет выполнять следующие действия для получения результата:

  1. Получить строку, заключенную в {{}}
  2. Разделить строку на |
  3. Удалите ненужные пробелы, используя trim()
  4. . Проверьте и найдите значение fallback
  5. Replace строку с нужным значением

Вот пример программы, котораясделаем вышеуказанную операцию шаг за шагом.

var str = 'Hi {{ first_name | fallback: "there" }},'
var data = {
    first_name: "siva",
    last_name: "sankar",
    code: 29
}

function templateRender(str, data) {
    return str.replace(/{{([^}]+)}}/g, function (match, string) {
        var fallback = ''
        var stringArr = string.split("|");
        var value = stringArr[0].trim();

        if (stringArr[1]) { fallback = stringArr[1].match(/(?<=fallback\:\s?)(["'].*?["'])/)[0].replace(/["']/g, "").trim(); }
        return data[value] ? data[value] : fallback;
    });
}

console.log("New String :::: ", templateRender(str, data));
0 голосов
/ 08 февраля 2019

Посмотрите на руль.Это именно то, что делает Handlebars, https://handlebarsjs.com

. В качестве запасного варианта вы можете использовать if.

{{#if first_name}}{{first_name}}{{else}}there{{/if}},

, который будет использоваться по умолчанию, если first_name - falsey.

Есливы думаете, если это немного многословно, вы можете написать вспомогательную функцию для значений по умолчанию.

Handlebars.registerHelper('fallback', (val, def) => val || def);

и использовать ее в шаблоне

Hi {{fallback first_name 'there'}},

const template = Handlebars.compile(`Hi {{#if first_name}}{{first_name}}{{ else }}there{{/if}},`);
console.log(template({ first_name: '' }));
console.log(template({ first_name: 'Billy' }));

Handlebars.registerHelper('fallback', (val, def) => val || def);

const templateWithFallback = Handlebars.compile(`Hi {{fallback first_name 'there'}},`);

console.log(templateWithFallback({ first_name: '' }));
console.log(templateWithFallback({ first_name: 'Billy' }));
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.1.0/handlebars.min.js"></script>
...