简化特定的多正则表达式和字符串方法

时间:2018-05-13 11:32:04

标签: javascript regex string

我正在尝试将字符串转换为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"

1 个答案:

答案 0 :(得分:2)

您可以通过以下正则表达式获得相同的结果(仅仅是管道问题):

([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));