Đây là phiên bản chức năng camelCase của tôi:
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);
};
})();
Nó xử lý tất cả các trường hợp cạnh sau:
- mặc định chăm sóc cả dấu gạch dưới và dấu gạch nối (cấu hình với tham số thứ hai)
- chuỗi với các ký tự unicode
- chuỗi kết thúc bằng dấu gạch nối hoặc dấu gạch dưới
- chuỗi có dấu gạch nối hoặc dấu gạch dưới liên tiếp
Đây là một liên kết đến các bài kiểm tra trực tiếp: http://jsfiddle.net/avKzf/2/
Dưới đây là kết quả từ các bài kiểm tra:
- đầu vào: "ab-cd-ef", kết quả: "abCdEf"
- đầu vào: "ab-cd-ef-", kết quả: "abCdEf"
- đầu vào: "ab-cd-ef--", kết quả: "abCdEf"
- đầu vào: "ab-cd - ef--", kết quả: "abCdEf"
- đầu vào: "--ab-cd - ef--", kết quả: "AbCdEf"
- đầu vào: "--ab-cd -__- ef--", kết quả: "AbCdEf"
Lưu ý rằng các chuỗi bắt đầu bằng dấu phân cách sẽ dẫn đến một chữ cái viết hoa ở đầu. Nếu đó không phải là những gì bạn mong đợi, bạn luôn có thể sử dụng lcfirst. Đây là lcfirst của tôi nếu bạn cần nó:
function lcfirst(str) {
return str && str.charAt(0).toLowerCase() + str.substring(1);
}