我在这里找到了一段非常好的代码 https://stackoverflow.com/a/45979883/9138729
我很难让它在我的 C# 表单应用程序中工作
function transposeChord(chord, amount) {
var scale = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
var normalizeMap = {
"Cb": "B",
"Db": "C#",
"Eb": "D#",
"Fb": "E",
"Gb": "F#",
"Ab": "G#",
"Bb": "A#",
"E#": "F",
"B#": "C"
};
return chord.replace(/[CDEFGAB](b|#)?/g, function(match) {
matchIndex = normalizeMap[match] ? normalizeMap[match] : match;
var i = (scale.indexOf(matchIndex) + amount) % scale.length;
if (i < 0) {
return scale[i + scale.length];
} else {
return scale[i];
}
}
);
}
- normalizeMap var 每行有 2 个选项(字符串 [,]?)。
- C# 中的替换功能不适用于 "(b|#)?/g" 部分(我认为)
- 函数(匹配)存在于 C# 中吗?
还是我需要采用全新的方法来适应 C# 逻辑?