javascript - 递增字符串中包含的特定数字

标签 javascript string increment

我正在使用如下所示的字符串:

"do3mi3so3 la3 ti4 do5 re5 mi5 /2 x2 fa4"
我想将字符串中的每个数字增加一个特定点,以排除“/”或“x”旁边的数字。例如,如果我想增加上述字符串的所有数字超过点 do3mi3so3,我希望得到这个:
"do3mi3so3 la4 ti5 do6 re6 mi6 /2 x2 fa5"
这是我的代码:

function is_numeric(str){
    return /^\d+$/.test(str);
}


function change_octave(notes,split_point){
  for(var i=(split_point-1);i<notes.length;i++){
    if(is_numeric(notes[i])==true){
      notes[i]='' + parseInt(notes[i])+1;
      //console.log(parseInt(notes[i])+1) //these numbers are incrementing
    }
    if(notes[i]=='/'||notes[i]=='x'){
      i = i+3;
    }
  }
  return notes;
}
var notes = "do3mi3so3 la3 ti4 do5 re5 mi5 /2 x2 fa4";
console.log(change_octave(notes,4));

尽管数字成功增加,但字符串的值不会改变。
谢谢。

最佳答案

您实际上无法使用 notes[i] = "a" 之类的方式在特定索引处设置字符串的字符.您可以做的是将字符串拆分为一个数组,更改该数组中的值,然后在完成后将其重新组合成一个字符串。

function is_numeric(str){
    return /^\d+$/.test(str);
}

function change_octave(notesStr,split_point){
  const notes = notesStr.split('');
  for(var i=(split_point-1);i<notes.length;i++){
    if(is_numeric(notes[i])==true){
      const newValue = parseInt(notes[i]) + 1;
      notes[i] = '' + newValue;
    }
    if(notes[i]=='/'||notes[i]=='x'){
      i = i+3;
    }
  }
  return notes.join('');
}
var notes = "do3mi3so3 la3 ti4 do5 re5 mi5 /2 x2 fa4";
console.log(change_octave(notes,4));

关于javascript - 递增字符串中包含的特定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66396359/

相关文章:

javascript - 在 JavaScript 中创建 json 文件

Java程序延迟空白字符串从打印到控制台

swift - 在 Swift 中打乱字符串中的字符

php - 试图从我的 json 中找到并摆脱这个\u0000

c - 为什么我可以在函数内而不是 main 中增加 char 数组位置

c - printf 会改变变量吗?

javascript - 按 Enter 键使用 AngularJs 在 Ionic Popup 中提交

javascript - 为什么从对象中删除比拼接数组更快?

javascript - 切换在 react 中不起作用,没有错误

c++ - 如何增加 LARGE_INTEGER