Javascript/jQuery:拆分大小写字符串并用连字符代替空格

56

我想这是一个使用正则表达式的多部分情况,但如何在大写字母处拆分驼峰字符串并将它们变成小写字母,然后在每个新字符串之间添加连字符?

例如:

thisString

将变成:

this-string


在你的例子中,你没有保留大写字母,你是指 this-String 吗? - David Titarenco
我认为@user1048007想要保留大写字母,然后转换成小写。 - Wouter J
Wouter是正确的。它应该以小写字母结尾。 - user1048007
5个回答

124

尝试类似以下的内容:

var myStr = 'thisString';

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

2
我认为你需要使用 .toLowerCase,但无论如何我都得到了 -thisstring。 - user1048007
2
可能需要在这里加上 /g:myStr.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() - Christopher Davies
太棒了!这里是CoffeeScript Polyfill:String :: toDash?= -> @replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() - Martin K

19
晚回答了,但这个解决方案适用于仅有一个单词首字母大写的情况。
'thisIsATest'.replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase();  // this-is-a-test

5

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/


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接