Ось моя версія функції 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);
};
})();
Він обробляє всі наступні крайові корпуси:
- піклується про підкреслення і дефіс за замовчуванням (налаштовується за допомогою другого параметра)
- рядок з символами unicode
- рядок, який закінчується дефісами або підкресленнями
- рядок, який має послідовні дефіси чи підкреслення
Ось посилання на живі тести: http://jsfiddle.net/avKzf/2/
Ось результати тестів:
- вхід: "ab-cd-ef", результат: "abCdEf"
- вхід: "ab-cd-ef-", результат: "abCdEf"
- вхід: "ab-cd-ef--", результат: "abCdEf"
- вхід: "ab-cd - ef--", результат: "abCdEf"
- вхід: "--ab-cd - ef--", результат: "AbCdEf"
- вхід: "--ab-cd -__- ef--", результат: "AbCdEf"
Зауважте, що рядки, які починаються з роздільників, на початку матимуть велику літеру. Якщо ви цього не очікували, ви завжди можете використовувати lcfirst. Ось мій lcfirst, якщо він вам потрібен:
function lcfirst(str) {
return str && str.charAt(0).toLowerCase() + str.substring(1);
}