如何在驼峰案例键名之间添加空格?

问题描述 投票:1回答:3

我创建了一个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>';
javascript html json mailgun nodemailer
3个回答
2
投票
replace(/([a-z])([A-Z])/g, `$1 $2`)

您可以替换所有lowerUpper匹配。

每次小写字符后跟一个大写字符时,正则表达式匹配并用自己和两者之间的空格替换两个字符。

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()方法链接到replace方法。

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

2
投票

您可以使用replace函数来确定字母是否为大写,并返回带有字符的前缀空格(如果是),同时确保第一个字符为大写。

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
投票

你可以用正则表达式在大写字符上切开它们。看到这个问题:Javascript Split string on UpperCase Characters

© www.soinside.com 2019 - 2024. All rights reserved.