Как сделать первый символ заглавными буквами всех слов в JavaScript? - PullRequest
6 голосов
/ 18 декабря 2010

Я искал решение, но пока не нашел.

У меня есть следующая строка.

1. hello
2. HELLO
3. hello_world
4. HELLO_WORLD
5. Hello World

Я хочу преобразовать их в следующее:

1. Hello
2. Hello
3. HelloWorld
4. HelloWorld
5. HelloWorld

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

Спасибо

Ответы [ 5 ]

14 голосов
/ 18 декабря 2010

Вот решение для регулярного выражения:

Первая строчная строка:

 str = str.toLowerCase();

Замените все _ и пробелы и первые символы в слове заглавными буквами:

 str = str.replace(/(?:_| |\b)(\w)/g, function(str, p1) { return p1.toUpperCase()})

DEMO

Обновление: Меньше шагов;)

Объяснение:

/            // start of regex
 (?:         // starts a non capturing group
   _| |\b    // match underscore, space, or any other word boundary character 
             // (which in the end is only the beginning of the string ^)
  )          // end of group
 (           // start capturing group
  \w         // match word character
 )           // end of group
/g           // and of regex and search the whole string

Значение группы захвата доступно в функции как p1, а выражение целом заменяется возвращаемым значением функции.

10 голосов
/ 18 декабря 2010

Вы можете сделать что-то вроде этого:

function toPascalCase(str) {
    var arr = str.split(/\s|_/);
    for(var i=0,l=arr.length; i<l; i++) {
        arr[i] = arr[i].substr(0,1).toUpperCase() + 
                 (arr[i].length > 1 ? arr[i].substr(1).toLowerCase() : "");
    }
    return arr.join("");
}

Вы можете проверить это здесь , подход довольно прост, .split() строка в массиве при поиске пробела или подчеркивания. Затем переберите массив, в верхнем регистре первую букву, в нижнем регистре остальные ... затем возьмите этот массив слов в заглавных словах и .join() снова соберите его в одну строку.

5 голосов
/ 18 декабря 2010
function foo(str) {
    return $(str.split(/\s|_/)).map(function() {
        return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase();
    }).get().join("");
}

Рабочая демонстрация: http://jsfiddle.net/KSJe3/3/ (я использовал регулярное выражение Никс в демо)


Редактировать: Другая версиякода - я заменил map () на $ .map ():

function foo(str) {
    return $.map(str.split(/\s|_/), function(word) {
        return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
    }).join("");
}

Рабочая демонстрация: http://jsfiddle.net/KSJe3/4/

0 голосов
/ 22 августа 2017

var city = city.replace (/ \ s + / g, '') // заменить все пробелы на единичное пространство city = city.replace (/ \ b \ w / g, city => city .toUpperCase ())// после пробела буквы конвертируем прописную

0 голосов
/ 13 марта 2017

ES6 / функциональное обновление @ ответа NickCraver . Как и в ответе @ NickCraver, эта функция будет корректно обрабатывать несколько пробелов / подчеркиваний, отсеивая их.

const pascalWord = x => x[0].toUpperCase() + x.slice(1).toLowerCase();

const toPascalCase2 = (str) => (
  str.split(/\s|_/)
    .filter(x => x)
    .map(pascalWord)
    .join('')
);

const tests = [
'hello',
'HELLO',
'hello_world',
'HELLO_WORLD',
'Hello World',
'HELLO__WORLD__',
'Hello   World_',
].map(toPascalCase2).join('<br>');

document.write(tests);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...