2012-01-21 38 views
57

Tôi sẽ tưởng tượng đây là tình huống nhiều phần với regex, nhưng làm cách nào bạn chia chuỗi camelcase ở các chữ cái viết hoa thành chữ viết thường và sau đó thêm dấu nối giữa mỗi chuỗi mới?Javascript/jQuery: Tách chuỗi camelcase và thêm dấu gạch nối thay vì không gian

Ví dụ:

thisString

sẽ trở thành:

này dây

+0

Trong ví dụ của bạn, bạn không giữ các chữ cái viết hoa, ý của bạn là 'chuỗi này'? –

+0

Tôi nghĩ rằng @ user1048007 muốn giữ thư nháp, nhưng sau đó viết thường. –

+0

Wouter là chính xác. Nó sẽ kết thúc bằng chữ thường. – user1048007

Trả lời

120

Hãy thử một cái gì đó như:

var myStr = 'thisString'; 

myStr = myStr.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); 
+2

Tôi nghĩ bạn cần. ToLowerCase, nhưng dù bằng cách nào tôi cũng nhận được - dây – user1048007

+0

@ user1048007 cảm ơn bạn. Tôi đã cập nhật nó. –

+0

Hoàn hảo! Cảm ơn! – user1048007

1
String.prototype.camelCaseToDashed = function(){ 
    return this.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); 
} 
// Usage 
"SomeVariable".camelCaseToDashed(); 
19

Trả lời muộn, nhưng giải pháp này sẽ hoạt động đối với các trường hợp mà một chữ cái duy nhất là lạc đà.

'thisIsATest'.replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase(); // this-is-a-test 
+0

chỉ hoạt động tốt! –

1

Tôi không biết lý do tại sao tất cả các giải pháp này rất phức tạp, nhưng tôi chỉ đơn giản là tìm thấy điều này là đủ:

function camelCaseToDash(input){ 
    // replace Capital letter with the letter + a dash: '-', then lowercase everything. 
    return input.replace(/([A-Z])/g, '-$1').toLowerCase(); 
}  

//or, using a callback function, directly lowercasing. 
function camelCaseToDashCallback(input){ 
    //replace capital letter with lowercase variant + a dash '-'. 
    return input.replace(/([A-Z])/g, (x)=> "-"+ x.toLowerCase()); 
}  

thường lựa chọn 1 là nhanh hơn mặc dù: https://jsfiddle.net/4557z/17/

Các vấn đề liên quan