尝试将名称拆分为标题/名字/姓氏的Javascript正则表达式
我想尝试在Javascript中检测一个人姓名的不同部分,并将其删除,以便将其传递给其他内容 名称可以以任何格式显示-例如:- 林文杰小姐尝试将名称拆分为标题/名字/姓氏的Javascript正则表达式,javascript,regex,Javascript,Regex,我想尝试在Javascript中检测一个人姓名的不同部分,并将其删除,以便将其传递给其他内容 名称可以以任何格式显示-例如:- 林文杰小姐 龙志强小姐 鲍勃·史密斯 弗雷德 戴维斯先生 我想试着写一些简单的东西,最好能猜到这些,并且在80%左右的时间里都正确(我们有一些非常不可靠的数据) 我正在考虑使用正则表达式来检查它是否有前缀,然后将其分支到两个地方,以确定它是否有前缀 /^(Dr|Mr|Mrs|Miss|Master|etc).? / 然后用类似于 /(\w+ )+(\w+)/ 匹
- 龙志强小姐
- 鲍勃·史密斯
- 弗雷德
- 戴维斯先生
/^(Dr|Mr|Mrs|Miss|Master|etc).? /
然后用类似于
/(\w+ )+(\w+)/
匹配姓氏和其他姓名。尽管如此,我不确定我在这里的贪婪/不贪婪选项,也不确定我是否可以使用所有不同的可用路径来创建快捷方式。基本上,希望找到一些简单的东西,这样做的工作在一个很好的方式
由于我使用的ETL工具的局限性,它还必须用Javascript编写。为什么不呢,只需检查结果部分:
// Split on each space character
var name = "Miss Victoria C J Long".split(" ");
// Check the first part for a title/prefix
if (/^(?:Dr|Mr|Mrs|Miss|Master|etc)\.?$/.test(name[0])) {
name.shift();
}
// Now you can access each part of the name as an array
console.log(name);
//-> Victoria,C,J,Long
工作演示:
当然,这无法解决人们在评论中提到的其他问题,但使用一个正则表达式,您将在这些问题上更加困难
var title = '';
var first_name = '';
var last_name = '';
var has_title = false;
if (name != null)
{
var new_name = name.split(" ");
// Check the first part for a title/prefix
if (/^(?:Dr|Mr|Mrs|Miss|Master)\.?$/i.test(new_name[0]))
{
title = new_name.shift();
has_title = true;
}
if (new_name.length > 1)
{
last_name = new_name.pop();
first_name = new_name.join(" ");
}
else if(has_title)
{
last_name = new_name.pop();
}
else
{
first_name = new_name.pop();
}
}
改编自公认的答案:)我曾经做过类似的工作。我想你是在无中生有。中士安东尼·汤姆·奥雷利少校,三世。司令官司令官A·R·维斯(司令官的贝塔符号)。代理兰斯·科波尔·安妮·玛丽·约翰逊。P.Smith先生,博士,John Taylor III先生,东芝公司,Park Young June先生(美国人,姓Young June)。Park Young-June先生(韩国人,姓Park),A.John Reynolds先生,JrWhat@Paul说,如果——正如你所说——你有非常不可靠的数据,我怀疑你会得到高达80%的数据,你甚至没有可靠的方法知道什么百分比是正确的——除了手动检查。。。“嗨,我叫张一江。我姓张,我的第一个名字是江怡。你好吗?“啊啊啊啊啊!!!“(提示:希望你的数据中不要包含太多的亚洲名字)@YJ,你是否也有一个英文名字让Mez更难理解?是的,我知道名字很难理解,但这就是为什么我们给一个名字提供了一个自由流场:)然而,还有一些东西想把它分开:(