脊柱病例是用破折号分隔单词。我有以下代码,如果单词是由空格分隔的,但是如果你有一个字符串,其中单词不是由像这样的空格分隔:“ThisIsSpinalCase”,它应该返回“this-is-spinal-case”。想不出一种方法来识别str中的每个新单词。建议?
function spinalCase(str) {
return str.replace(/[\s\W_]/g, "-").toLowerCase();
}
spinalCase('This_is spinal case'); // returns this-is-spinal-case
编辑:我意识到我可以检查何时有一个新的大写字母,但这需要在最后一个单词和下一个单词之间添加一个空格
答案 0 :(得分:0)
这个过程是这样的:
在字符串的其余部分,您有两个条件:
但是,您可以通过使用此次调用替换replace(/(([A-Z])|[\s_])+/g, "-$2")
来解决这两个条件,只需一次替换,这意味着:
$2
将不匹配,因为它与大写字母不匹配。)$2
将具有该字母的值)。示例:
function spinalCase(str) {
return (str[0] + str.substr(1).replace(/(([A-Z])|[\s_])+/g, "-$2")).toLowerCase();
}