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' }