Javascript/jQuery:拆分camelcase字符串并添加连字符而不是空格

Javascript/jQuery:拆分camelcase字符串并添加连字符而不是空格,javascript,regex,split,camelcasing,Javascript,Regex,Split,Camelcasing,我可以想象这是一个由多个部分组成的正则表达式,但是如何在大写字母处拆分camelcase字符串,将其转换为小写字母,然后在每个新字符串之间添加连字符 例如: 这串 将成为: 这根绳子 尝试以下方法: var myStr = 'thisString'; myStr = myStr.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); 请尝试以下操作: var token = document.getElementsByTagName('stron

我可以想象这是一个由多个部分组成的正则表达式,但是如何在大写字母处拆分camelcase字符串,将其转换为小写字母,然后在每个新字符串之间添加连字符

例如:

这串

将成为:

这根绳子

尝试以下方法:

var myStr = 'thisString';

myStr = myStr.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
请尝试以下操作:

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);
示例-

字符串
replace
函数的文档:


回答晚了,但此解决方案适用于单个字母采用驼峰式大小写的情况

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

我不知道为什么所有这些解决方案都这么复杂,但我只是觉得这就足够了:

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的速度更快:

在您的示例中,您没有保留大写字母,您的意思是
这个字符串
?我认为@user1048007希望保留大写字母,但保留小写字母。Wouter是正确的。它应该以小写结尾。我想你需要。toLowerCase,但不管怎样,我得到的是-这个字符串可能想要在那里加上一个/g:myStr.replace(/([a-z])([a-z])/g,'$1-$2')。toLowerCase()太棒了!下面是CoffeeScript Polyfill:String::toDash?=->@replace(/([a-z])([a-z])/g,'$1-$2')。toLowerCase()
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());
}