Javascript / jQuery: разделить строку верблюда и добавить дефис вместо пробела - PullRequest
57 голосов
/ 21 января 2012

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

thisString

станет:

this-string

Ответы [ 5 ]

123 голосов
/ 21 января 2012

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

var myStr = 'thisString';

myStr = myStr.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
19 голосов
/ 20 апреля 2016

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

'thisIsATest'.replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase();  // this-is-a-test
5 голосов
/ 21 января 2012

Попробуйте следующее:

var token = document.getElementsByTagName('strong')[0].innerHTML,
    replaced = token.replace(/[a-z][A-Z]/g, function(str, offset) {
       return str[0] + '-' + str[1].toLowerCase();
    });

alert(replaced);

Пример - http://jsfiddle.net/7DV6A/2/

Документация для строки replace Функция:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace

1 голос
/ 16 февраля 2017

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

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/

1 голос
/ 29 марта 2016
String.prototype.camelCaseToDashed = function(){
  return this.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}
// Usage
"SomeVariable".camelCaseToDashed();
...