javascript - 将带有可选全名的字符串转换为姓名和首字母

标签 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, 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
        }
    });
});

但这似乎有点复杂......

最佳答案

你快完成了。

此提案使用 Array#reduce用于连接名称的各个部分并应用所需的大写首字母。

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

function reName(string) {
    var names = string.split(","),
        etal = names[names.length - 1].indexOf('et al') !== -1 ? names.pop().trim() : '',
        condensed = names.map(function (name) {
            return name.trim().split(" ").reduce(function (r, part, index) {
                return index ? r + part[0].toUpperCase() : part + ' ';
            }, '');
        });

    etal && condensed.push(etal);
    return condensed.join(', ');
}

console.log(reName('Any-Name Tom, Name Brian Joe, Smith Judie'));
console.log(reName('Any-Name Tom, Name Brian Joe, Smith Judie, et al.'));

关于javascript - 将带有可选全名的字符串转换为姓名和首字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38265247/

相关文章:

java - 用于在模式之后提取值的正则表达式

使用字典的 Python 正则表达式替换

javascript - 使用 Google Chrome 确定内存泄漏的来源

JAVASCRIPT 验证表单中的日期

javascript - HTML5 SVG 抗锯齿导致路径之间出现灰线。如何避免?

java - 如何在正则表达式的帮助下使用 replaceAll() 方法忽略字符串中的特殊字符 ($ ^ + () {} 等)

javascript - 有条件地设置 "data-remote"- Javascript

javascript - 解码base64图像并上传

javascript - 字母数字、空格和符号的正则表达式,与我需要的不匹配

javascript - 我的 jquery 正则表达式无法工作(电子邮件地址验证)