如何在驼峰式键名之间添加 space?
How to add a space between camel case key name?
我创建了一个 node.js 网站,潜在员工可以通过该网站申请工作。当他们提交申请表时,我使用 nodemailer 和 mailgun 将包含申请人信息的电子邮件发送给招聘经理。它发送带有键值对的新申请人的对象,但我想在包含多个单词的键之间放置一个 space 并使它们大写以便更赏心悦目。我该怎么做?
这是一个带有输出键值对的示例电子邮件
这是发送邮件的代码
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 Split string on UpperCase Characters
replace(/([a-z])([A-Z])/g, ` `)
您可以替换所有 lowerUpper 匹配项。
每当一个小写字符后跟一个大写字符时,正则表达式匹配并用它们自己和一个 space 替换这两个字符。
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, ` `)}: ${value}</li>`;
});
html += '</ul>';
如果键应该是完整的大写,您可以将 toUpperCase()
方法链接到替换方法。
html += `<li>${key.replace(/([a-z])([A-Z])/g, ` `).toUpperCase()}: ${value}</li>`;
您可以使用替换函数来确定字母是否为大写,如果是,则 return 为字符添加前缀 space,同时确保第一个字符为大写。
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]
来获取大写字符,但需要注意的是,如果您希望将第一个字符大写并且 space 驼峰式,则此比较还offset
函数中的 offset
参数(将其视为字符串的索引)允许您在 单次遍历字符串时执行此操作。
一个例子:
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>';
我创建了一个 node.js 网站,潜在员工可以通过该网站申请工作。当他们提交申请表时,我使用 nodemailer 和 mailgun 将包含申请人信息的电子邮件发送给招聘经理。它发送带有键值对的新申请人的对象,但我想在包含多个单词的键之间放置一个 space 并使它们大写以便更赏心悦目。我该怎么做?
这是一个带有输出键值对的示例电子邮件
这是发送邮件的代码
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 Split string on UpperCase Characters
replace(/([a-z])([A-Z])/g, ` `)
您可以替换所有 lowerUpper 匹配项。
每当一个小写字符后跟一个大写字符时,正则表达式匹配并用它们自己和一个 space 替换这两个字符。
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, ` `)}: ${value}</li>`;
});
html += '</ul>';
如果键应该是完整的大写,您可以将 toUpperCase()
方法链接到替换方法。
html += `<li>${key.replace(/([a-z])([A-Z])/g, ` `).toUpperCase()}: ${value}</li>`;
您可以使用替换函数来确定字母是否为大写,如果是,则 return 为字符添加前缀 space,同时确保第一个字符为大写。
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]
来获取大写字符,但需要注意的是,如果您希望将第一个字符大写并且 space 驼峰式,则此比较还offset
函数中的 offset
参数(将其视为字符串的索引)允许您在 单次遍历字符串时执行此操作。
一个例子:
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>';