【问题标题】:JavaScript Function: Capitalize First Letter and All Letters Following _ in Input Str of FunctionJavaScript 函数:在函数的输入 Str 中将第一个字母和 _ 之后的所有字母大写
【发布时间】:2019-12-10 15:41:26
【问题描述】:

假设我有一个接受字符串输入的函数。

字符串输入如下所示:“first_time_run”

下面是我的代码

function changeInput (str) {
  // your code here
  return str[0].toUpperCase()+id.slice(1)
}

上面的代码在我希望它返回First_Time_Run时返回First_time_run

我做错了什么?

【问题讨论】:

  • 您忘记为and All Letters Following _ 条件编码
  • 这里是在黑暗中拍摄的,但如果你想在页面上大写显示内容,我会使用text-transform css。不知道这是否是你在这里做的。

标签: javascript regex string function uppercase


【解决方案1】:

你可以像这样使用你的函数。它将您的输入拆分为_,将每个输入的首字母大写,然后重新加入:

var input = "first_time_run";

function changeCap(str) {
  // your code here
  return str[0].toUpperCase()+str.slice(1)
}

function changeInput(str) {
  return str.split("_").map((val) => changeCap(val)).join("_");
}

console.log(changeInput(input))

或者你可以用正则表达式替换:

var input = "first_time_run";


function changeInput(str) {
  return str.replace(/(^\w|(?<=_)\w)/g, (l)=> l.toUpperCase())
}

console.log(changeInput(input))

【讨论】:

  • 谢谢你;在你的第二个例子中,什么是(1)?是那个吗?
  • 它的字母“l”不是1,它只是变量名代表字符串的第一个字母或在正则表达式中捕获的_之后。
  • (l) 是箭头的开始。 (l) =&gt; ... 至少在这种情况下等同于 function(l){ ... }。欲了解更多信息,请参阅developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
【解决方案2】:

考虑以下扩展示例:

  1. 由于您需要将多个字符大写,我们需要循环遍历所有字符
  2. 我们可以通过循环重构字符串,并使用标志来指示下一个字符是否应为大写。
  3. 根据您的示例,我们需要检测的特殊字符是下划线_
  4. 结果将是_ 之后的所有字符都为大写。

function changeInput(str) {
  var newStr = '';
  // Uppercase the first letter by default
  var upperCaseNext = true;
  
  // Loop to reconstruct the input string letter by letter
  for (var i = 0; i < str.length; i++) {
    if (upperCaseNext) {
      // Uppercase the current character and add it to the new string
      newStr += str[i].toUpperCase();
      // Reset the flag
      upperCaseNext = false;
    } else {
      // Add the current character as is
      newStr += str[i];
      // If current character is _ then enable flag to uppercase the next character
      upperCaseNext = str[i] === '_';
    }
  }

  return newStr;
}

let test = 'first_time_run';
console.log(test, '=>', changeInput(test))

【讨论】:

    【解决方案3】:

    不使用正则表达式如何(因为您没有特别提到您只想使用正则表达式):

    function convertToFirstUpper(sInput) {
        return sInput.split('_').reduce((sPrev, sWord) => `${sPrev}_${sWord[0].toUpperCase()}${sWord.slice(1)}`, '').slice(1)
    }
    
    let sResult = convertToFirstUpper('first_time_run');
    
     console.log(sResult);
    

    我是在手机上输入的,所以很难格式化代码。

    【讨论】:

      【解决方案4】:

      您还可以使用 for 循环遍历您的代码并使用 if 条件,该条件仅在第一个字母为小写时才会大写。

      这里的关键是显示什么类型的字符将数组中要大写的字符拆分,然后将字符重新连接成由相同的下划线字符分隔的字符串。

      let result = "first_time_run";
      
      function makeFirstUpper(result1) {
        let newValue = result1.split('_');
      
        for(let i = 0; i < newValue.length; i++){
          if(newValue[i].charAt(0) == newValue[i].charAt(0).toLowerCase()){
          newValue[i] = newValue[i].charAt(0).toUpperCase() + newValue[i].substring(1);
          }
        }
        return newValue.join('_');
      }
      
      console.log(makeFirstUpper(result));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-30
        • 2015-04-01
        • 2015-06-16
        • 2018-07-08
        • 2021-09-16
        • 2011-09-29
        • 2021-03-29
        相关资源
        最近更新 更多