2012-01-21 1 views
57

Я бы предположил, что это многопользовательская ситуация с регулярным выражением, но как бы вы разделили цепочку верблюдов на заглавные буквы, превратив их в строчные буквы, а затем добавив дефис между каждой новой строкой?Javascript/jQuery: Разделите цепочку верблюдов и добавьте дефис, а не пробел

Например:

thisString

стал бы:

это строка

+0

В вашем примере, вы не держите заглавные буквы, вы имели в виду 'this-String'? –

+0

Я думаю, что @ user1048007 хочет сохранить заглавную букву, но затем в нижнем регистре. –

+0

Wouter правильный. Он должен заканчиваться строчным. – user1048007

ответ

120

Попробуйте что-то вроде:

var myStr = 'thisString'; 

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

Я думаю, что вам нужно .toLowerCase, но в любом случае я получаю -thisstring – user1048007

+0

@ user1048007 спасибо. Я обновил его. –

+0

Отлично! Благодаря! – user1048007

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

Позднее ответьте, но это решение будет работать для случаев, когда одна буква - верблюд.

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

работал просто отлично! –

1

Я не знаю, почему все эти решения настолько сложны, но я просто нашел, что это будет достаточно:

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()); 
}  

вообще вариант 1 быстрее, хотя: https://jsfiddle.net/4557z/17/