我想尝试在Javascript中检测一个人姓名的不同部分,并将其剪切掉,以便我可以将它们传递给其他人。
名称可以以任何格式显示 - 例如: -
miss victoria m j laing
我想尝试写一些简单的东西,这样做是最好的猜测这些并且在80%的时间左右正确得到它们(我们有一些非常狡猾的数据)
我正在考虑使用正则表达式检查它是否有前缀,然后分支到两个位置是否有
/^(Dr|Mr|Mrs|Miss|Master|etc).? /
然后用
之类的东西切掉剩下的部分/(\w+ )+(\w+)/
匹配姓氏和其他名称。虽然,我不确定我在这里的贪婪/不合理的选择,以及我是否可以做一些快捷方式来获得可能有的所有不同路径。基本上,希望找到一些简单的东西,这样可以很好地完成工作。
由于我正在使用的ETL工具的限制,它也必须用Javascript编写。
答案 0 :(得分:2)
为什么不split(),只检查结果部分:
// 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
工作演示:http://jsfiddle.net/AndyE/p9ra4/
当然,这不会解决人们在评论中提到的其他问题,但是你只需要一个正则表达式就可以解决这些问题。
答案 1 :(得分:1)
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();
}
}
改编自接受的答案:)