在JS中获取名字和姓氏的首字母

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

我想使用现代 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

javascript ecmascript-6
1个回答
0
投票

在我的解决方案中,我沿着连词完全分割名称,只保留开头。随后,对于每个由多个大写字母组成的单词,我也将它们分开。从这些名称中,我连接第一个和最后一个大写字母并返回结果。

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));
}

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