Преобразование строки в заглавный регистр после тире или косой черты

Я использую эту общую функцию для преобразования большинства элементов моего списка в регистр заголовков без проблем. Я обнаружил одно место, которое нуждается в улучшении, когда в середине есть тире или косая черта, я хочу, чтобы следующая буква была заглавной.

Например, латиноамериканец/латиноамериканец должен быть латиноамериканцем/латиноамериканцем. В основном используйте заглавную букву, когда первая буква или предшествует символу ИЛИ пробелу.

Текущий код:

function toTitleCase(str) {
    return str.toLowerCase().replace(/(?:^|\s)\w/g, function (match) {
        return match.toUpperCase();
    });
}

person Connie DeCinko    schedule 04.05.2017    source источник


Ответы (3)


Просто измените свой захват пробела \s, чтобы он был классом символов, состоящим из пробелов, дефиса или косой черты [\s-/] (и всего, что вы хотите)

function toTitleCase(str) {
    return str.toLowerCase().replace(/(?:^|[\s-/])\w/g, function (match) {
        return match.toUpperCase();
    });
}

console.log(toTitleCase("test here"));
console.log(toTitleCase("test/here"));
console.log(toTitleCase("test-here"));

person Jamiec    schedule 04.05.2017

просто добавьте или условия в регулярном выражении /(?:^|\s|\/|\-)\w/g

function toTitleCase(str) {
    return str.toLowerCase().replace(/(?:^|\s|\/|\-)\w/g, function (match) { 
      return match.toUpperCase();  
    });
}


console.log(toTitleCase('His/her new text-book'))

person Ja9ad335h    schedule 04.05.2017

Вот решение, которое удаляет тире. Итак, для следующего ввода:

list-item

Он возвращает:

ListItem

Расширение решения Jamiec, которое позволит достичь этого:

function toTitleCase(str) {
    return str.toLowerCase().replace(/(?:^|[\s-/])\w/g, function (match) {
        return match.toUpperCase();
    }).replace('-', '');
}
console.log(toTitleCase("list-item"));

person Richard Lovell    schedule 29.05.2020