gpt4 book ai didi

javascript - 将单个字段分隔为名称、名字和姓氏

转载 作者:行者123 更新时间:2023-11-30 08:57:58 28 4
gpt4 key购买 nike

如何将全名拆分为单名、中间名和姓氏?

显然,不可能涵盖所有可能性。我只想要一个规则:如果单词后有其他单词不超过 3 个字母,则它必须与下一个单词连接。

此外,我假设全名有 3 个或更多单词。

我什至不知道如何开始。

例如:

约翰·马丁· jackson :

  • 姓名 1:约翰
  • 姓名 2:马丁
  • 姓名 3: jackson

史蒂文庞塞德莱昂普雷斯利

  • 姓名 1:史蒂文
  • 姓名 2:庞塞德莱昂
  • 姓名 3:普雷斯利

迈克尔德拉罗莎马丁 jackson :

  • 姓名 1:Michael de la Rosa
  • 姓名 2:马丁
  • 姓名 3: jackson

:S

最佳答案

一个非常奇特的正则表达式可以做到这一点。要匹配一个名字,请使用

/\S+((\s+\S{1,3})+\s+\S+)*/

然后,将其中三个与不匹配的组组合在一起,但每个都包含在一个中,由空格连接:

/^(\S+(?:(?:\s+\S{1,3})+\s+\S+)*)\s+(\S+(?:(?:\s+\S{1,3})+\s+\S+)*)\s+(\S+(?:(?:\s+\S{1,3})+\s+\S+)*)$/

要使其匹配没有中间名的人,请将其设为可选:

/^(\S+(?:(?:\s+\S{1,3})+\s+\S+)*)(?:\s+(\S+(?:(?:\s+\S{1,3})+\s+\S+)*))?\s+(\S+(?:(?:\s+\S{1,3})+\s+\S+)*)$/

更新:不要尝试在一个正则表达式中匹配整个名称。只需使用带有全局标志的第一个(简单)正则表达式:

> "Steven Ponce de Leon Presley".match(/\S+((\s+\S{1,3})+\s+\S+)*/g)
["Steven", "Ponce de Leon", "Presley"]

解释:

/
\S+ match a word
( followed by any number of
( at least one
\s+ whitespace-separated
\S{1,3} up-to-three-letters word
)+
\s+ and a whitespace-separated
\S+ word
)*
/g

但是,我认为带有一些字符串和数组函数的算法会使发生的事情更清楚,并允许对匹配过程进行更多自定义:

var names = input.split(/s+/);
if (names.length < 2)
return; // special case handling for only one word
var short = 0;
for (var i=names.length-2; i>=0; i--) {
// starting at the second-to-last, I expect names not to end with a short one
if (names[i].length < 4) {
short++;
} else if (short) {
names[i] += " "+names.splice(i+1, short+1).join(" ");
short = 0;
}
}
return names; // an Array with at least one name

关于javascript - 将单个字段分隔为名称、名字和姓氏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11786510/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com