我正在使用如下所示的字符串:
"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/