我正在尝试将字符串转换为Spinal Tap案例。 (脊柱情况是全小写的单词 - 由破折号连接)。挑战freeCodeCamp。虽然我的代码正在运行,但我想知道如何简化它,即将两个正则表达式合并为一个,并将方法replace
和toLowerCase
合并为一个语句, 如果可能。
这是我的代码:
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"
。
答案 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));