ЯШ: Как сделать заглавной первую букву каждого разделенного символами слова в строке? - PullRequest
0 голосов
/ 02 января 2019

Мой JS хорошо просыпается, когда в строке есть одно слово:

  • BRUNO ==> Bruno

Хорошо работает и тогда, когда строка представляет собой пробел в словах:

  • ДЖИН МАРК ==> Жан Марк

Но когда это слова, разделенные подчеркиванием, я получил?:

  • Жан-Франсуа ==> Жан-Франсуа (неверно)

Моя цель обобщить это наполучить это:

  • Жан-Франсуа ==> Жан-Франсуа

Как мне сделать так, как?

Мой сценарий таков:

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

Ответы [ 4 ]

0 голосов
/ 22 апреля 2019

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
0 голосов
/ 02 января 2019

Вы можете добавить дефис (-) как часть регулярного выражения:

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'));
0 голосов
/ 02 января 2019

Если у вас будет много разделителей, вы можете создать с ними массив и использовать его для динамического создания вашего регулярного выражения. Как это:

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));
0 голосов
/ 02 января 2019

Вы можете использовать каждую первую букву, а также каждую букву после таких символов:

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"));
...