我创建了一个node.js网站,潜在的员工可以通过该网站申请工作。当他们提交申请表时,我使用nodemailer和mailgun向招聘经理发送一封电子邮件,上面写着申请人的信息。它使用键值对发送新申请人的对象,但我想在包含多个单词的键之间放置一个空格,并使它们大写以使其更加令人愉悦。我怎样才能做到这一点?
这是一个包含输出键值对的示例电子邮件
这是发送电子邮件的代码
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>';
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>`;
您可以使用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>';
你可以用正则表达式在大写字符上切开它们。看到这个问题:Javascript Split string on UpperCase Characters