function dashes(str) {
str = str.replace(/_/g,' ').replace(/\s+/g,"-").toLowerCase();
return str;
}
//test cases
dashes("thisCakeIsDelicious");
dashes("TheBig cat was Boastful");期望的输出分别是:“this-cake-is- desired”和“the -big cat-was-boastful”。如何在"TheBig“之间加一个空格而不与"Boastful”前面的空格相矛盾。我已经尝试过正则表达式,特别是大写字母,但正如你所看到的,大而自负的开头是B。
发布于 2016-11-14 11:29:03
这应该可以工作,但我不能完全确定需求,所以我决定按单词而不是按字母进行划分(因此LLLLie将生成llllie,而不是l-l-l-lie)
([a-z]+)([A-Z]{1})|(\s)
匹配项:
([a-z]+):1或多个小写letter([A-Z]{1}):1大写letter(\s+):一个或多个空格字符(等于[\r\n\t\f\v ])
var dasher = function(str) {
return str
.trim()
.replace(/([a-z]+)([A-Z]{1})|(\s+)/g, '$1-$2')
.toLowerCase();
}
console.log(dasher('thisCakeIsDelicious'));
console.log(dasher('TheBig cat was Boastful'));
console.log(dasher('The cakeIsA LLLLLie'));
console.log(dasher(' JeremySpoke inClass Today'));
发布于 2016-11-14 09:25:26
您可以在replace函数中使用回调
function dashes(str) {
return str.replace(/(?!^)(\s?[A-Z\s+])/g, function(x) {
return '-' + x.trim();
}).toLowerCase();
}
//test cases
console.log( dashes("thisCakeIsDelicious") );
console.log( dashes("TheBig cat was Boastful") );
发布于 2016-11-14 10:04:03
x = "thisCakeIsDelicious";
x.replace(/([a-z](?=[A-Z]))| /g, '$1-');结果:
this-Cake-Is-Delicious,
和
x = "TheBig cat was Boastful";
x.replace(/([a-z](?=[A-Z]))| /g, '$1-');结果:
The-Big-cat-was-Boastful
https://stackoverflow.com/questions/40580609
复制相似问题