Заглавийте первую букву каждого слова

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

например:

THIS IS A TEST ---> This Is A Test
this is a TEST ---> This Is A Test
this is a test ---> This Is A Test

Что будет простой функцией javascript

Ответы

Ответ 1

Вот небольшой один вкладыш, который я использую, чтобы выполнить работу

var str = 'this is an example';
str.replace(/\b./g, function(m){ return m.toUpperCase(); });

но Джон Ресиг сделал довольно удивительный script, который обрабатывает много случаев http://ejohn.org/blog/title-capitalization-in-javascript/

Обновить

Ответ ES6 +:

str.split(' ').map(s => s.charAt(0).toUpperCase() + s.slice(1)).join(' ');

Вероятно, еще лучший способ. Он будет работать с ударными символами.

Ответ 2

function capitalizeEachWord(str)
{
   var words = str.split(" ");
   var arr = [];
   for (i in words)
   {
      temp = words[i].toLowerCase();
      temp = temp.charAt(0).toUpperCase() + temp.substring(1);
      arr.push(temp);
   }
   return arr.join(" ");
}

Ответ 3

"tHiS iS a tESt".replace(/[^\s]+/g, function(str){ 
    return str.substr(0,1).toUpperCase()+str.substr(1).toLowerCase();
  });

Другой вариант:

"tHiS iS a tESt".replace(/(\S)(\S*)/g, function($0,$1,$2){ 
    return $1.toUpperCase()+$2.toLowerCase();
  });

Ответ 4

Это простое решение, которое разбивает предложение на массив, затем перебирает массив, создавая новый массив с заглавными словами.

 function capitalize(str){

  var strArr = str.split(" ");
  var newArr = [];

  for(var i = 0 ; i < strArr.length ; i++ ){

    var FirstLetter = strArr[i].charAt(0).toUpperCase();
    var restOfWord = strArr[i].slice(1);

    newArr[i] = FirstLetter + restOfWord;

  }

  return newArr.join(' ');

}

Ответ 5

посмотрите ucwords from php.js - похоже, это то, что вы ищете. в основном, это:

function ucwords (str) {
    return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
        return $1.toUpperCase();
    });
}

обратите внимание, что THIS IS A TEST вернет THIS IS A TEST, поэтому вам придется использовать его следующим образом:

var oldstring = "THIS IS A TEST";
var newstring = ucwords(oldstring.toLowerCase());

или немного измените функцию:

function ucwords (str) {
    str = (str + '').toLowerCase();
    return str.replace(/^([a-z])|\s+([a-z])/g, function ($1) {
        return $1.toUpperCase();
    });
}
var oldstring = "THIS IS A TEST";
var newstring = ucwords(oldstring); // This Is A Test

Ответ 6

Это будет использовать каждое слово, разделенное пробелом или тире

function capitalize(str){
    str = str.toLowerCase();
    return str.replace(/([^ -])([^ -]*)/gi,function(v,v1,v2){ return v1.toUpperCase()+v2; });
}

Примеры:

  • я lOvE oRanges = > Я люблю апельсины.
  • синтаксис strAnge-looKing = > странный синтаксис

и т.д.

Ответ 7

Если вы не против использовать библиотеку, вы можете использовать Sugar.js capitalize()

capitalize (all = false) Заглавная буква первого символа в строка и сокращает все остальные буквы. Если все верно, все слова в строка будет заглавной.

Пример:

'hello kitty'.capitalize()     -> 'Hello kitty'
'hello kitty'.capitalize(true) -> 'Hello Kitty'

Ответ 8

вы также можете использовать подход ниже, используя фильтр:

function Ucwords(str){
    var words = str.split(' ');
    var arr = [];
    words.filter(function(val){
        arr.push(val.charAt(0).toUpperCase()+ val.substr(1).toLowerCase());             
    })
    console.log(arr.join(" ").trim());
    return arr.join(" ").trim();
}

Ucwords("THIS IS A TEST") //This Is A Test

Ucwords("THIS ") //This