Идея этой функции состоит в том, чтобы преобразовать camelCase в спинальный регистр с помощью групп захвата регулярных выражений для захвата заглавных букв, внесения изменений и последующей их повторной вставки. Группа захвата работает, но функция замены - нет, и я начинаю получать мигрени с регулярным выражением.
function spinalCase(str) {
var regexp = /([A-Z]{1})/g;
var match;
var matches = "";
var myRegexp;
while ((match = regexp.exec(str)) != null) {
matches = "-" + match[1].toLowerCase();
//matches = "t", "i", "s", "t"
myRegexp = new RegExp(match[1], "g");
str.replace(myRegexp, matches);
}
return str;
//returns the original string without modifications
}
console.info(spinalCase('ThisIsSpinalTap'));вы не назначаете результат от replace.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Всю эту функцию можно заменить простой однострочником в ES6:
var spinalCase = str => str.replace(/[A-Z]/g, match => '-' + match.toLowerCase());
До ES6 (но не совсем эквивалент из-за правил подъема):
function spinalCase(str) {
return str.replace(/[A-Z]/g, function(match) {
return '-' + match.toLowerCase();
}
}
'ThisIsSpinalTap'.replace(/[A-Z]/g, function(m) {return "-" + m.toLowerCase();})