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

JS : How to capitalize first letter of each symbol-separated word in a string?

当字符串只有一个字时,我的JS会很好地工作:

  • 布鲁诺=>布鲁诺

当字符串是空格分隔的单词时,它也能很好地工作:

  • 让-马克=>让-马克

但当它是一个下划线分隔的单词时,我得到了?:

  • Jean-Francois==>Jean-Francois(错误)

我的目的是将其概括为:

  • 让-弗朗索瓦=>让-弗朗索瓦

我怎么才能变成那样?

我的剧本是:

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


如果要使用许多分隔符,可以使用它们创建一个数组,并使用它动态创建regex。这样地:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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));


您可以添加连字符(-作为regex的一部分:

1
2
3
4
5
6
7
8
9
10
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
2
3
4
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


您可以将每一个第一个字母以及每一个字母都大写,如下所示:

1
2
3
4
5
6
7
8
9
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"));