我想使用现代 JavaScript 语法检索一个人名字和姓氏的首字母。目前,我可以正确检索名字的第一个字母和姓氏的第一个字母。
我的问题是,如果有“of”这个词,我无法检索它。
代码
const names = ["Joshua Jones of USA", "William Sanders", "Grey Charles", "Carlos James Thomas of Russia", "Peter John Parker", "Juan Carlos Tenaz Lopez III of Spain"];
function getUserInitials(name) {
return name.split(' ').map(w => w.charAt(0).toUpperCase()).splice(0,2);
}
for (const name of names)
console.log(getUserInitials(name));
预期输出
JJ、WS、GC、CT、PP、JL
在我的解决方案中,我沿着连词完全分割名称,只保留开头。随后,对于每个由多个大写字母组成的单词,我也将它们分开。从这些名称中,我连接第一个和最后一个大写字母并返回结果。
function getUserInitials(name) {
// Clean up the name: remove titles, conjunctions, and punctuation
// Carlos James Thomas of Russia ---> Carlos James Thomas
name = name.replace(/(?:\b(?:of|the|and|in|on|at|for|with)\b|[,\.]).*$/gi, '');
// Remove all-uppercase words (e.g., III)
// Juan Carlos Tenaz Lopez III, Mexico ---> Juan Carlos Tenaz Lopez
name = name.replace(/\b[A-Z]+\b/g, '');
// Remove whitespaces
name = name.trim();
// Get names
const words = name.split(' ');
// Get first char from First and Last name
let result = '';
result += words[0].charAt(0).toUpperCase();
result += words[words.length - 1].charAt(0).toUpperCase();
return result;
}
// Test cases
const names = [
"Joshua Jones of USA",
"William Sanders",
"Grey Charles",
"Carlos James Thomas of Russia",
"Juan Carlos Tenaz Lopez III, Mexico"
];
for (const name of names) {
console.log(getUserInitials(name));
}