String.prototype Case Conversions – toTitleCase, toCapitalCase, anyStringToTitleCase.

Existem inúmeros String.prototypeexemplos de código para alterar maiúsculas e minúsculas que podem ser encontrados, mas nenhum parece abordar o problema comum em que a entrada da string está em maiúsculas e é necessária para a saída como “Maiúsculas” ou “Título maiúsculo” – os exemplos I ‘ vi resultará simplesmente no retorno da string ainda em maiúsculas.

Optou por seguir a convenção de nomenclatura para String conforme descrito por .toLowerCase()e .toUpperCase().

.toCapitalCase ()

/* string.toCapitalCase()
Handles inputs:

UPPERCASE, "space separated".

eg: 'STRING TO CONVERT'.toCapitalCase() returns: 'String to convert'

*/

String.prototype.toCapitalCase = function() {
return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase();
};

.toTitleCase ()

/* string.toTitleCase()
Handles inputs:

UPPERCASE, "space separated".

eg: 'STRING TO CONVERT'.toTitleCase() returns: 'String To Convert'

*/

String.prototype.toTitleCase = function() {
return this.split(' ')
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
.join(' ');
};

.anyStringToTitleCase ()

/* string.anyStringToTitleCase()
Handles inputs:

"space separated", camelCase, ClassCase, UPPERCASE, snake_case, dash-case, object.case.

eg: 'string-toConvert_has a.very ComplexStructure'.anyStringToTitleCase()

returns: 'String To Convert Has A Very Complex Structure'

*/

const STRING_DECAMELIZE_REGEXP = (/([a-zd])([A-Z])/g);
const STRING_SEPARATORS_REGEXP = (/(-|_|.)/g);

String.prototype.anyStringToTitleCase = function() {
return this.replace(STRING_DECAMELIZE_REGEXP, '$1 $2')
.replace(STRING_SEPARATORS_REGEXP, ' ')
.split(' ')
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
.join(' ');
};