簡體   English   中英

JavaScript函數:在函數的輸入str中大寫首字母和_之后的所有字母

[英]JavaScript Function: Capitalize First Letter and All Letters Following _ in Input Str of Function

假設我有一個接受字符串輸入的函數。

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

下面是我的代碼

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

上面的代碼在我希望它返回First_time_run時返回First_Time_Run

我究竟做錯了什么?

您可以像這樣使用您的函數。 它將您的輸入除以_ ,大寫每個字母的首字母,然后重新加入:

 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. 由於您需要大寫一個字符,因此我們需要遍歷所有字符
  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)) 

在沒有正則表達式的情況下如何做(因為您沒有特別提到您只想使用正則表達式):

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);

我在手機上輸入了此代碼,因此很難格式化代碼。

您還可以使用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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM