Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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,我需要把一个有名字的字符串转换成一个名字和首字母用逗号分隔的字符串 示例 Any-Name Tom, Name Brian Joe, Smith Judie, et al. Any-Name T., Name Brian J., Smith J., et al. Any-Name T, Name B J, Smith J, et al. Any-Name Tom,Name Brian Joe,Smith Judie, et al. …所有人都应该 Any-Name T, Name BJ, Sm

我需要把一个有名字的字符串转换成一个名字和首字母用逗号分隔的字符串

示例

Any-Name Tom, Name Brian Joe, Smith Judie, et al.
Any-Name T., Name Brian J., Smith J., et al.
Any-Name T, Name B J, Smith J, et al.
Any-Name Tom,Name Brian Joe,Smith Judie, et al.
…所有人都应该

Any-Name T, Name BJ, Smith J, et al.
是可选的。所以

Any-Name Tom, Name Brian Joe, Smith Judie
。。。应该得到

Any-Name T, Name BJ, Smith J
我试着这样做:

var names = string.split(",");
names.forEach(function(name) {
    name = name.trim();
    var parts = name.split(" ");
    parts.forEach(function(part, index) { 
        if (index > 0) {
            var initial = part.slice(0,1);
            // get upper case
        }
    });
});

但这似乎有点复杂…

你几乎完成了

此方案用于连接名称的各个部分,并应用所需的大写首字母

如有必要,可使用大写字符串对
'et al'
进行检查。如果找到一个,则稍后将其添加到结果中

函数重命名(字符串){
变量名称=string.split(“,”),
etal=names[names.length-1].indexOf('et al')!=-1?names.pop().trim():“”,
浓缩=名称.map(函数(名称){
返回name.trim().split(“”).reduce(函数(r,part,index){
返回索引?r+部分[0]。toUpperCase():部分+“”;
}, '');
});
etal&压缩推力(etal);
return.join(',');
}
log(重命名('Any-Name Tom,Name Brian Joe,Smith Judie');

log(重命名('Any-Name Tom,Name Brian Joe,Smith Judie,et al.')此解决方案不会简化OP,但它通过创建一个名为newNames的新字符串并将组件(名字和首字母等)写入其中来完成OP

var str=“任何名字汤姆、布赖恩·乔、史密斯·朱迪”;
变量名称=str.split(“,”);
var newNames=“”;
name.forEach(函数(名称){
var neatName;
name=name.trim();
var parts=name.split(“”);
parts.forEach(函数(part,索引){
如果(索引===0)neatName=part+“”;
如果(索引>0){
初始变量=零件切片(0,1);
neatName+=首字母;
}
});
newNames+=neatName+“,”;
});
newNames+=“等。”;
document.write(新名称)