Aquí está mi versión de la función camelCase:
var camelCase = (function () {
var DEFAULT_REGEX = /[-_]+(.)?/g;
function toUpper(match, group1) {
return group1 ? group1.toUpperCase() : '';
}
return function (str, delimiters) {
return str.replace(delimiters ? new RegExp('[' + delimiters + ']+(.)?', 'g') : DEFAULT_REGEX, toUpper);
};
})();
Maneja todos los siguientes casos límite:
- se encarga de los guiones bajos y guiones de forma predeterminada (configurable con el segundo parámetro)
- cadena con caracteres unicode
- cadena que termina con guiones o guiones bajos
- cadena que tiene guiones o guiones bajos consecutivos
Aquí hay un enlace a las pruebas en vivo: http://jsfiddle.net/avKzf/2/
Aquí están los resultados de las pruebas:
- entrada: "ab-cd-ef", resultado: "abCdEf"
- entrada: "ab-cd-ef-", resultado: "abCdEf"
- entrada: "ab-cd-ef--", resultado: "abCdEf"
- entrada: "ab-cd - ef--", resultado: "abCdEf"
- entrada: "--ab-cd - ef--", resultado: "AbCdEf"
- entrada: "--ab-cd -__- ef--", resultado: "AbCdEf"
Observe que las cadenas que comienzan con delimitadores darán como resultado una letra mayúscula al principio. Si eso no es lo que esperarías, siempre puedes usar lcfirst. Aquí está mi primer mensaje si lo necesita:
function lcfirst(str) {
return str && str.charAt(0).toLowerCase() + str.substring(1);
}