我正在尝试将字符串转换为Spinal Tap大小写。 (小写字母是全小写的单词,由短划线连接)。在freeCodeCamp挑战。尽管我的代码有效,但我想知道如何简化它,即,将两个正则表达式组合为一个,并在可能的情况下将方法replacetoLowerCase组合为一个语句。

这是我的代码:

function spinalCase(str) {
  var reg = new RegExp(/([a-zA-Z]+)[^a-zA-Z]/, "g");
  str = str.replace(reg, "$1-");
  var reg2 = new RegExp(/([a-z])([A-Z])/, "g");
  str = str.replace(reg2, "$1-$2");
  str = str.toLowerCase();
  return str;
}


spinalCase("This Is Spinal Tap")应该返回"this-is-spinal-tap"
spinalCase("thisIsSpinalTap")应该返回"this-is-spinal-tap"
spinalCase("The_Andy_Griffith_Show")应该返回"the-andy-griffith-show"
spinalCase("Teletubbies say Eh-oh")应该返回"teletubbies-say-eh-oh"
spinalCase("AllThe-small Things")应该返回"all-the-small-things"

最佳答案

使用下面的正则表达式可以达到相同的结果(只是管道问题):

([a-z])(?:([A-Z])|[^a-zA-Z])


替换$1-$2



function spinalCase(s) {
  return s.replace(/([a-z])(?:([A-Z])|[^a-zA-Z\n])/g, '$1-$2').toLowerCase();
}

var str = `This Is Spinal Tap
thisIsSpinalTap
The_Andy_Griffith_Show
Teletubbies say Eh-oh
AllThe-small Things`;

console.log(spinalCase(str));

关于javascript - 简化特定的多个正则表达式和String方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50315642/

10-12 13:33