javascript - 如何在 Javascript 中将字符串转换为脊柱大小写?

标签 javascript regex str-replace

我被困在这个编码挑战中 Spinal Tap Case来自freeCodeCamp。本质上,我不知道如何执行最后一次检查。

这是最后一次检查:spinalCase("AllThe-small Things") should return "all-the-small-things"
这是我的代码:

function spinalCase(str) {
    var outputString, 
              newstr,
              pattern1 = new RegExp(/[_\s]/, 'g'),
              pattern2 = new RegExp(/(?=[A-Z])/, 'g'),
              stringTest1 = pattern1.test(str),
              stringTest2 = pattern2.test(str);

         if(stringTest1)  {
                outputString = str.replace(pattern1, '-');
                newstr = outputString.toLowerCase();
          } else if(stringTest2) {
               str.split(/(?=[A-Z])/).join(' ');
                outputString = str.replace(pattern2, '-');
                newstr = outputString.toLowerCase();
          } else if (stringTest1 && stringTest2){
                outputString = str.replace(pattern1, '-');
                outputString = str.replace(pattern2, '-');
                newstr = outputString.toLowerCase();
          }

  return newstr;

}

我确实意识到最后一个 else if条件应该先行,但是我没有正确理解语法。

提前致谢!

最佳答案

以下是我推荐的做法:

function sp(str) {
  var spinal = str.replace(/(?!^)([A-Z])/g, ' $1')
                .replace(/[_\s]+(?=[a-zA-Z])/g, '-').toLowerCase();
  return spinal 
}

JsBin Example

就您的代码而言,您检查:

如果 test1 else if test2 ,然后 else if test1 and test2 ,逻辑不正确:

您可以尝试添加 !test2!test1第一个 if 检查以使其正常工作:
if (stringTest1 && !stringTest2)...

编辑:

这里是你如何让你的代码在最后一个 else 中触发的方法,如果我在其中放了一个 console.log 来向你展示:

JSBin Example
function spinalCase(str) {
    var outputString, 
              newstr,
              pattern1 = new RegExp(/[_\s]/, 'g'),
              pattern2 = new RegExp(/(?=[A-Z])/, 'g'),
              stringTest1 = pattern1.test(str),
              stringTest2 = pattern2.test(str);

         if(stringTest1 && !stringTest2)  {
                outputString = str.replace(pattern1, '-');
                newstr = outputString.toLowerCase();
          } else if(!stringTest1 && stringTest1) {
               str.split(/(?=[A-Z])/).join(' ');
                outputString = str.replace(pattern2, '-');
                newstr = outputString.toLowerCase();
          } else if (stringTest1 && stringTest2){
                console.log('were in the last else!!!');
                outputString = str.replace(pattern1, '-');
                outputString = str.replace(pattern2, '-');
                newstr = outputString.toLowerCase();
          }

  return newstr;

}

关于javascript - 如何在 Javascript 中将字符串转换为脊柱大小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658624/

相关文章:

javascript - 来自图像源的 Canvas 像素动画

regex - 我的重定向 301 正则表达式有什么问题?

正则表达式和 Perforce 命令

python - 你能用 Python 中的字典值写一个 str.replace() 吗?

php - 如何使用 php 将字符串中的最后一个逗号替换为 "and"?

Javascript 替换全部在 macOS/iOS 上的 safari 中不起作用

javascript - Chart.js 中折线图的交点?

javascript - 平移 + 缩放带有固定第一列的 HTML5 Canvas 网格

javascript - 完全禁用水平滚动,也在放置事件中

regex - [Perl] : Read directory and files, 和正则表达式