当字符串中的单词不用空格分隔时,将字符串隐藏到脊柱情况

时间:2017-09-28 20:51:00

标签: javascript

脊柱病例是用破折号分隔单词。我有以下代码,如果单词是由空格分隔的,但是如果你有一个字符串,其中单词不是由像这样的空格分隔:“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

编辑:我意识到我可以检查何时有一个新的大写字母,但这需要在最后一个单词和下一个单词之间添加一个空格

1 个答案:

答案 0 :(得分:0)

这个过程是这样的:

  1. 第一个字母不会改变任何东西,所以让它出来。
  2. 在字符串的其余部分,您有两个条件:

    • 你只有一个空格或一个下划线,那么你应该用短划线替换它。
    • 你有一个大写字母,那么你应该用一个破折号后跟那个字母替换它。

    但是,您可以通过使用此次调用替换replace(/(([A-Z])|[\s_])+/g, "-$2")来解决这两个条件,只需一次替换,这意味着:

    • 如果正则表达式与空格或下划线匹配,它只会用短划线替换它($2将不匹配,因为它与大写字母不匹配。)
    • 如果正则表达式与大写字母匹配,它将用短划线替换它,后跟该字母($2将具有该字母的值)。
  3. 我们将第一个字母与其余字母(替换后)连接起来。
  4. 我们小写结果。
  5. 完成!
  6. 示例:

    function spinalCase(str) {
      return (str[0] + str.substr(1).replace(/(([A-Z])|[\s_])+/g, "-$2")).toLowerCase();
    }