Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试将名称拆分为标题/名字/姓氏的Javascript正则表达式_Javascript_Regex - Fatal编程技术网

尝试将名称拆分为标题/名字/姓氏的Javascript正则表达式

尝试将名称拆分为标题/名字/姓氏的Javascript正则表达式,javascript,regex,Javascript,Regex,我想尝试在Javascript中检测一个人姓名的不同部分,并将其删除,以便将其传递给其他内容 名称可以以任何格式显示-例如:- 林文杰小姐 龙志强小姐 鲍勃·史密斯 弗雷德 戴维斯先生 我想试着写一些简单的东西,最好能猜到这些,并且在80%左右的时间里都正确(我们有一些非常不可靠的数据) 我正在考虑使用正则表达式来检查它是否有前缀,然后将其分支到两个地方,以确定它是否有前缀 /^(Dr|Mr|Mrs|Miss|Master|etc).? / 然后用类似于 /(\w+ )+(\w+)/ 匹

我想尝试在Javascript中检测一个人姓名的不同部分,并将其删除,以便将其传递给其他内容

名称可以以任何格式显示-例如:-

林文杰小姐

  • 龙志强小姐
  • 鲍勃·史密斯
  • 弗雷德
  • 戴维斯先生
我想试着写一些简单的东西,最好能猜到这些,并且在80%左右的时间里都正确(我们有一些非常不可靠的数据)

我正在考虑使用正则表达式来检查它是否有前缀,然后将其分支到两个地方,以确定它是否有前缀

/^(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更难理解?是的,我知道名字很难理解,但这就是为什么我们给一个名字提供了一个自由流场:)然而,还有一些东西想把它分开:(