JS:如何将字符串中每个用符号分隔的单词的首字母大写?

时间:2019-01-02 11:03:01

标签: javascript regex typescript ecmascript-6 ecmascript-5

当字符串只有一个单词时,我的JS会正常工作:

  • 布鲁诺==>布鲁诺

当字符串是空格分隔的单词时,它也很好用:

  • JEAN MARC ==> Jean Marc

但是当它是下划线时,我得到了吗? :

  • JEAN-FRANCOIS ==> Jean-francois (错误)

我的目的是对其进行概括:

  • JEAN-FRANCOIS ==> Jean-Francois

我如何使其变得像那样?

我的脚本是:

capitalizeString(str) {
    var lowerString = str.toLowerCase();
    return lowerString.replace(/(^| )(\w)/g, (x) => {
      return x.toUpperCase();
    });
}

4 个答案:

答案 0 :(得分:1)

您可以将连字符(-)添加为RegEx的一部分:

function capitalizeString(str) {
    var lowerString = str.toLowerCase();
    return lowerString.replace(/(^|[ -])(\w)/g, (x) => {
      return x.toUpperCase();
    });
}

console.log(capitalizeString('BRUNO'));
console.log(capitalizeString('JEAN MARC'));
console.log(capitalizeString('JEAN-FRANCOIS'));

答案 1 :(得分:1)

如果要使用许多分隔符,则可以使用它们创建一个数组,并使用它动态创建正则表达式。像这样:

const separators = ['^', ' ', '-'];

const capitalizeString = (str) =>
    str.toLowerCase()
       .replace(new RegExp(`(${separators.join('|')})\\w`, 'g'), (x) => x.toUpperCase());


const s1 = 'BRUNO';
const s2 = 'JEAN MARC';
const s3 = 'JEAN-MARC';

console.log(capitalizeString(s1));
console.log(capitalizeString(s2));
console.log(capitalizeString(s3));

答案 2 :(得分:0)

您可以大写每个第一个字母以及后面的每个字母,如下所示:

function capitalizeString(str) {
    var lowerString = str.toLowerCase();
    return lowerString.replace(new RegExp("(?:\\b|_)([a-z])", "g"), (x) => {
      return x.toUpperCase();
    });
}


console.log(capitalizeString("abcd-efgh"));

答案 3 :(得分:0)

String.prototype.capitalized = function () {       
    return this.toLowerCase().replace(/(^|[^a-z])[a-z]/g, v => v.toUpperCase());
};
console.log('I-love-YOU-guy'.capitalized());   // => I-Love-You-Guy