นี่คือฟังก์ชัน 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 ได้ตลอดเวลา นี่คือครั้งแรกของฉันถ้าคุณต้องการ:
function lcfirst(str) {
return str && str.charAt(0).toLowerCase() + str.substring(1);
}