我正在尝试将字符串转换为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"
。 最佳答案
使用下面的正则表达式可以达到相同的结果(只是管道问题):
([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/