2016-11-14 25 views
1
function dashes(str) { 
    str = str.replace(/_/g,' ').replace(/\s+/g,"-").toLowerCase(); 
    return str; 
} 

//test cases 
dashes("thisCakeIsDelicious"); 
dashes("TheBig cat was Boastful"); 

所需的输出分别是:“这个蛋糕很好吃”和“这个大猫是自夸的”。 如何在“TheBig”之间放置一个空格而不会与“Boastful”之前的空格相矛盾。我曾尝试正则表达式特别大写字母,但你可以看到又大又自夸开始B.将破折号放在一个字符串中

回答

0

你可以在replace功能在使用回调

function dashes(str) { 
 
    return str.replace(/(?!^)(\s?[A-Z\s+])/g, function(x) { 
 
    \t return '-' + x.trim(); 
 
    }).toLowerCase(); 
 
} 
 

 
//test cases 
 
console.log(dashes("thisCakeIsDelicious")); 
 
console.log(dashes("TheBig cat was Boastful"));

0
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

4

这应该工作,但我没有绝对的把握有关的要求,所以我决定用字不信(所以LLLLie将分裂导致llllie,而不是l-l-l-lie

([a-z]+)([A-Z]{1})|(\s)

匹配:

  • ([a-z]+):1或更大小写字母
  • ([A-Z]{1}):1个大写字母
  • (\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'));

+0

如果你使用'str.trim()。replace(...)',你可以避开前面的破折号,如果你和'\ s +'匹配,你可以避免由于空格造成单词之间的额外破折号。 –

+0

@Jason Cust,我认为空格是相关的,但在例子中OP正在尝试'替换(/ \ s +/g,“ - ”)',所以你正确''s +'更好。另外修剪是一个好主意,我应该使用它。我刚发现一个问题,TheCakeIsALie的输出是''cake-is-alie''',在这种情况下需要用字母分隔。 – Marcs

相关问题