Javascript 将姓名拆分为姓、名、中间首字母

Javascript 将姓名拆分为姓、名、中间首字母,javascript,regex,Javascript,Regex,我有一个包含用户名的文本框中的用户输入 输入可以如下所示: var input = "Doe, John M"; 然而,输入可能要复杂得多。 比如: 还是多伊,约翰·M 还是多伊,约翰,M 甚至Doe Sr,John,M 我想做的是将姓氏和sr或jr分开,然后是中间的首字母 因此,这些字符串变成: var输入=DoeJohnM或Doe SrJohnM或DoeJohnM 我试过这个正则表达式 input=input.replace/\s*,\s*/g; 但这并没有考虑最后一个中间的首字母 我相信

我有一个包含用户名的文本框中的用户输入

输入可以如下所示:

var input = "Doe, John M";
然而,输入可能要复杂得多。 比如:

还是多伊,约翰·M

还是多伊,约翰,M

甚至Doe Sr,John,M

我想做的是将姓氏和sr或jr分开,然后是中间的首字母

因此,这些字符串变成:

var输入=DoeJohnM或Doe SrJohnM或DoeJohnM

我试过这个正则表达式

input=input.replace/\s*,\s*/g;
但这并没有考虑最后一个中间的首字母

我相信这可能可以通过RegEx完成,但在我看来,将字符串拆分为数组通常更快,也不太复杂。请尝试以下功能:

var parseName = function(s) {
  var last = s.split(',')[0];
  var first = s.split(',')[1].split(' ')[1];
  var mi = s[s.length-1];

  return {
    first: first,
    mi: mi,
    last: last
  };    
};

您只需传入名称即可调用它,例如parseName'Doe,johnm',它返回一个包含first,mi,last的对象。我创建了一个可以测试您在问题中显示的姓名格式的测试工具。

以下内容似乎符合您的要求

input = input.replace(/\s*,\s*|\s+(?=\S+$)/g, '#');
在npm上签出语法分析器

将人名字符串解析为称呼、名字、中间名、姓氏和后缀

安装

npm install humanparser
用法


算了吧。第一个字段,中间的字段(如果有的话)和最后一个字段(他说的话)^^^^^^^^^!您应该控制用户输入信息的方式,而不是其他方式:。只需按您所需的方式为他们提供输入选项。他们只能忍受。他们会的;请考虑具有多于一个中间首字母的情况。
npm install humanparser
var human = require('humanparser');

var fullName = 'Mr. William R. Jenkins, III'
    , attrs = human.parseName(fullName);

console.log(attrs);

//produces the following output

{ saluation: 'Mr.',
  firstName: 'William',
  suffix: 'III',
  lastName: 'Jenkins',
  middleName: 'R.',
  fullName: 'Mr. William R. Jenkins, III' }