Spinal Tap Case-连接符连接小写单词

问题:

将字符串转换为 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 }

猜你喜欢

转载自www.cnblogs.com/tinglee2018/p/9791489.html