我有一个来自文本框的用户输入,其中包含用户名
输入可以如下所示:
var input = "Doe, John M";
但是,输入可能要复杂得多。 像:
var input = "Doe Sr, John M"
或"Doe, John M"
或"Doe, John, M"
甚至"Doe Sr, John,M"
我想做的是将姓氏(用sr或jr)分隔名字,然后分隔中间名字。
所以,这些字符串变为:
var input = "Doe#John#M"
或"Doe Sr#John#M"
或"Doe#John#M"
我试过这个正则表达式,
input = input.replace(/\s*,\s*/g, '#');
但这没有考虑到最后的中间初始。
答案 0 :(得分:4)
我确信这可以通过RegEx完成,但将字符串拆分为数组往往更快,更简单(IMO)。试试这个功能:
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, John M')
并返回包含first
,mi
,last
的对象。我创建了一个jsbin您可以尝试测试您在问题中显示的名称格式。
答案 1 :(得分:4)
在npm结帐humanparser
。
https://www.npmjs.org/package/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' }
答案 2 :(得分:2)
以下似乎符合您的要求
input = input.replace(/\s*,\s*|\s+(?=\S+$)/g, '#');