You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript提取姓名首字母问题:多名字场景处理失效

提取姓名首字母的优化方案(适配多名字、附加信息场景)

原代码仅能处理单名+姓氏的简单姓名格式,当遇到多名字、带"of 国家"附加信息或罗马数字后缀的姓名时,无法得到符合预期的首字母结果。我们需要提取第一个名字和最后一个真实姓氏的首字母,最终得到JJ, WS, GC, CT, PP, JL这样的输出。

优化后代码

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) {
  let words = name.split(' ');
  // 移除"of 国家"这类非姓名的附加信息
  const ofIndex = words.indexOf('of');
  if (ofIndex !== -1) {
    words = words.slice(0, ofIndex);
  }
  // 过滤掉罗马数字后缀(如III、IV这类非姓氏内容)
  const filteredWords = words.filter(word => !/^[IVXLCDM]+$/i.test(word));
  // 取第一个名字和最后一个姓氏的首字母拼接
  const firstInitial = filteredWords[0].charAt(0).toUpperCase();
  const lastInitial = filteredWords.at(-1).charAt(0).toUpperCase();
  return firstInitial + lastInitial;
}

// 执行测试并输出结果
const result = names.map(getUserInitials).join(', ');
console.log(result); // 输出:JJ, WS, GC, CT, PP, JL

代码逻辑说明

  1. 分割与截断附加信息:将姓名按空格拆分为单词数组后,找到"of"的位置,截断掉"of"及之后的内容(如国家名),只保留核心姓名部分。
  2. 过滤非姓氏后缀:通过正则表达式过滤掉罗马数字格式的后缀(如III、II),这些属于身份标识而非真实姓氏。
  3. 提取首字母:从处理后的姓名数组中,取第一个单词的首字母(名字首字母)和最后一个单词的首字母(姓氏首字母),拼接为最终结果。

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:22:55