【问题标题】:How can i eliminate white spaces in my regex code?如何消除正则表达式代码中的空格?
【发布时间】:2021-03-05 01:35:40
【问题描述】:

我正在尝试在我的作业中使用正则表达式。

这里有2个我无法解决的问题:

问题 1:第一个 if 语句旨在将字符串放入“pascal”大小写。第二个 if 语句变成“骆驼”的情况。不管是哪条语句,看起来执行在第一条语句之后都会停止。我在这里做错了什么?

问题 2:我的第一个 if 语句即使返回结果(“pascal”)我也无法弄清楚如何在代码的正则表达式部分中去除空格。

请帮忙。连续两天卡住了。

const makeCase = function(input, type) {
  //place your code here
  
    let inType = type;
    let finalInput = (type === inType)
  
  
    if(finalInput) {
      return input.replace(/^(.)|\s+(.)/g, function(str){
        return str.toUpperCase();
      });
    } else if(finalInput) {
      return input.replace(/\W+(.)/g, function(str){
        return str.toUpperCase();
      });
    } 
  };

  console.log(makeCase("this is a string", "pascal"));  
  console.log(makeCase("this is a string", "camel"));


【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    也许做ucwords,然后删除空格,然后根据类型,大写或小写第一个字符。

    function makeCase(str, type) {
      str = (str + '').replace(/^([a-z])|\s+([a-z])/g, $1 => $1.toUpperCase()).replace(/ /g, '')
      return str.charAt(0)[type === 'pascal' ? 'toUpperCase' : 'toLowerCase']() + str.slice(1)
    }
    
    console.log(makeCase("this is a string", "pascal")); // ThisIsAString
    console.log(makeCase("this is a string", "camel"));  // thisIsAString

    【讨论】:

    • 我显然不理解 100% 的代码。我尝试将其扩展到其他情况:console.log(makeCase("this is a string", "snake")); console.log(makeCase("这是一个字符串", "kebab")); console.log(makeCase("这是一个字符串", "title")); console.log(makeCase("这是一个字符串", "元音")); console.log(makeCase("这是一个字符串", "辅音")); console.log(makeCase("这是一个字符串", ["upper", "snake"]));.但由于缺乏了解,我失败了。你能帮我解决这个问题吗?有解释。提前致谢
    • 它们都是不同的样式,不适合“pascal or camel”,而camel只是带有小写第一个字符的pascal,由type === 'pascal' ? 'toUpperCase' : 'toLowerCase'处理,我上面的代码只适合帕斯卡或骆驼,以解决原始问题。如果您想处理所有差异类型,那么您应该使用一堆 if 并使用差异正则表达式或操作来解决每种类型,用您尝试过的内容打开一个新问题,只需传入一个差异字符串以获取类型将不起作用。
    • 非常感谢,劳伦斯。您的解释帮助我为除最后一个案例之外的每个案例找到单独的解决方案。我可能会在最后一个问题上发布一个问题。
    【解决方案2】:

    基本原理

    String.replace 方法只执行一次替换。

    在浏览器中你可以String.replaceAll,但是在节点中你不能。

    我发现解决此问题的最简单方法是使用split 将有空格的字符串拆分,然后使用join 将单词粘合在一起而没有空格。

    作为一个功能

    这是我如何编写它的一个工作示例;

    const makeCase = function(input, type) {
      //place your code here
      return input
        .split(' ')
        .map((word, index) => {
          if (index === 0 && type === 'camel') {
            return word
          } else {
            const [first, ...rest] = word;
            return `${first.toUpperCase()}${rest.join('')}`;
          }
        })
        .join('');
      }
    
    
    console.log(makeCase("this is a string", "pascal"));
    console.log(makeCase("this is a string", "camel"));

    创建replaceAll()

    创建您自己的 replaceAll 函数可能如下所示。

    export const replaceAll = (input, searchValue, replaceValue) => {
      return input.split(searchValue).join(replaceValue);
    };
    

    注意string.split 分隔符参数也可以make use of Regex

    现在你

    建议尝试理解每个部分并编写自己的变体。

    【讨论】:

      【解决方案3】:

      这是错误的,因为 finalInput 将始终为真:

          let inType = type;
          let finalInput = (type === inType)
      

      【讨论】:

        【解决方案4】:

        一个问题:将标志ig 放在一起。它有助于忽略大小写。

        【讨论】:

        • 如果你展示一个你所建议的例子会有所帮助。
        猜你喜欢
        • 2011-07-23
        • 2015-01-19
        • 1970-01-01
        • 2016-07-23
        • 2011-11-01
        • 2012-11-15
        • 2011-02-20
        • 1970-01-01
        • 2021-04-10
        相关资源
        最近更新 更多