Как добавить пробел между именем ключа дела верблюда? - PullRequest
1 голос
/ 28 марта 2019

Я создал сайт node.js, через который потенциальные сотрудники могут подать заявку на работу. Когда они отправляют заявку, я использую nodemailer и mailgun для отправки электронного письма менеджеру по найму с информацией о кандидатах. Он отправляет объект нового заявителя с парами ключ-значение, но я хотел бы поместить пробел между ключами, содержащими более одного слова, и сделать их заглавными, чтобы они были немного приятнее для глаз. Как я могу это сделать?

вот пример электронного письма с парами значений ключа вывода

enter image description here

Вот код для отправки электронного письма

function sendAppliedEmail(applicant) {


let html = '<img src="" alt="logo">';
  html += '<h2 style="color: black">New Applicant</h2>'
  html += '<ul>';

  Object.entries(applicant).forEach(([key, value]) => {
    html += `<li>${key}: ${value}</li>`;
  });

  html += '</ul>';

Ответы [ 3 ]

2 голосов
/ 28 марта 2019
replace(/([a-z])([A-Z])/g, `$1 $2`)

Вы можете заменить все нижние совпадения.

Каждый раз, когда символ нижнего регистра, за которым следует символ верхнего регистра, регулярное выражение сопоставляет и заменяет оба символа самим собой и пробел между ними.

function sendAppliedEmail(applicant) {


let html = '<img src="" alt="logo">';
  html += '<h2 style="color: black">New Applicant</h2>'
  html += '<ul>';

  Object.entries(applicant).forEach(([key, value]) => {
    html += `<li>${key.replace(/([a-z])([A-Z])/g, `$1 $2`)}: ${value}</li>`;
  });

  html += '</ul>';

если ключ должен быть в верхнем регистре, вы можете связать метод toUpperCase() с методом замены.

html += `<li>${key.replace(/([a-z])([A-Z])/g, `$1 $2`).toUpperCase()}: ${value}</li>`;
2 голосов
/ 28 марта 2019

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

key.replace(/[a-z]/gi, (m, o) => (m < {} && o) ? ` ${m}` : (o) ? m : m.toUpperCase())

Краткое объяснение

Вы можете определить, является ли символ прописным, сравнивая его с {}.Если символ меньше , он пишется с заглавной буквы, а если больше , то это строчные буквы.Это потому, что {} будет преобразован в строку [object Object], и оба кода будут сравниваться.При сравнении будет использоваться только первый символ («[»).Таким образом, "A" < "[" и "A" < {} эквивалентны.Это легче объяснить, увидев их коды символов:

"A".charCodeAt(0);
 //65
"[".charCodeAt(0);
 //91
"a".charCodeAt(0);
 //97

(На самом деле, использовать «[» эффективнее, и вместо оптимизации вы бы сравнили его с этим. Просто проще запомнить »{}"больше заглавных символов и наоборот)

Зачем это нужно?

В обычном RegEx вы можете просто использовать [A-Z], чтобы получить заглавные буквы, но предостережениезаключается в том, что если вы хотите использовать заглавные буквы в первом символе И пробел в верблюде, это сравнение в дополнение к параметру offset (воспринимается как индекс строки) в функции replace позволяет вам сделать это в единственный проход через строку.


Пример:

let splitCase = key => key.replace(/[a-z]/gi, (m, o) => (m < "[" && o) ? ` ${m}` : (o) ? m : m.toUpperCase());

let key = "phoneNumber";
console.log(splitCase(key));

key = "firstName";
console.log(splitCase(key));

В вашем коде:

Следующий фрагмент кода не работает , но он должен работать в вашем коде:

function sendAppliedEmail(applicant) {
let splitCase = (key) => key.replace(/[a-z]/gi, (m, o) => (m < "[" && o) ? ` ${m}` : (o) ? m : m.toUpperCase());

let html = '<img src="" alt="logo">';
  html += '<h2 style="color: black">New Applicant</h2>'
  html += '<ul>';

  Object.entries(applicant).forEach(([key, value]) => {
    html += `<li>${splitCase(key)}: ${value}</li>`;
  });

  html += '</ul>';
0 голосов
/ 28 марта 2019

Вы можете разрезать их на заглавные буквы с помощью регулярных выражений.См. Этот вопрос: Строка разделения Javascript для символов верхнего регистра

...