问题:
将字符串转换为 spinal case。Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也就是以连字符连接所有小写单词。
测试用例:
spinalCase("This Is Spinal Tap")
应该返回
"this-is-spinal-tap"
。
spinalCase("thisIsSpinalTap")
应该返回
"this-is-spinal-tap"
。
spinalCase("thisIsSp%inal*Tap")
应该返回
"this-is-spinal-tap"
。
spinalCase("The_Andy_Griffith_Show")
应该返回
"the-andy-griffith-show"
。
spinalCase("Teletubbies say Eh-oh")
应该返回
"teletubbies-say-eh-oh"
。
1 function spinalCase(str) { 2 // "It's such a fine line between stupid, and clever." 3 // --David St. Hubbins 4 var newStr = str.split(/-|\s|_/g); 5 newStr = newStr.map(function(obj){ //去掉所有非单词字符 6 return obj.replace(/\W/g,""); 7 }); 8 if(newStr.length === 1) //没有分割符,以大写字母分割时,加入空格 9 { 10 newStr = newStr[0].split(""); 11 for(var i = 0;i < newStr.length;i++) 12 { 13 if(newStr[i].search(/[A-Z]/) !== -1) 14 { 15 if(i === 0) 16 { 17 newStr[i] = newStr[i].toLowerCase(); 18 } 19 else 20 { 21 newStr[i] = " " + newStr[i].toLowerCase(); 22 } 23 } 24 } 25 newStr = newStr.join("");//连接成字符串 26 newStr = newStr.split(" ");//按空格分割成单词 27 } 28 else{ //有分割符时 29 newStr = newStr.map(function(obj){ 30 var rObj = obj.toLowerCase(); 31 return rObj; 32 }); 33 } 34 newStr = newStr.join("-"); 35 return newStr; 36 }