2016-10-30 2 views
0

chordpro ​​텍스트에서 키를 조 변경하는 데 사용하려는 코드의 매시업이 있습니다. 첫 번째 바꾸기는 모든 대괄호 사이의 텍스트를 가져와야합니다. 두 번째 바꾸기는 코드 문자를 가져 와서 증가/감소시킵니다.자바 스크립트에서 텍스트를 바꿀 때 예상되는 결과를 얻지 못합니다.

대부분 코드를 조바꿈하지만 두 가지 문제점이 있습니다.

출력은 코드가 바뀌는 횟수만큼 복제됩니다. 그리고 두 번째 텍스트 "{c : Chorus 1} Bless"는 "{c : Dhorus 1} Dbless"로 변경됩니다. 첫 번째 정규 표현식에서 경기를 사용하고 다음을 일치 :

https://jsfiddle.net/woemL2kd/11/

답변

1

만든이

var text = '{c:Intro} [D] [A] [E2/Db] [Gbm] [|] [D] [A] [|] [Esus] [E] {c:Chorus 1}Bless the [D]Lord '; 
var shift = 2; 
var reg = new RegExp(/\[(.*?)\]/g); 

newtext = text.replace(reg, function(result) { 
    var scale = ["C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab", "A", "Bb", "B"]; 
    return result.replace(/[CDEFGAB]#?/g, 
    function(match) { 
     var i = (scale.indexOf(match) + shift) % scale.length; 
     return scale[i < 0 ? i + scale.length : i]; 
    }); 
}); 

$('#chordpro').html(newtext); 

(변경을 시도해보십시오 여기

var text = '{c:Intro} [D] [A] [E2/Db] [Gbm] [|] [D] [A] [|] [Esus] [E] {c:Chorus 1}Bless the [D]Lord '; 
var shift = 2; 
var reg = new RegExp(/\[(.*?)\]/g); 

newtext = text.replace(reg, function() { 
    var scale = ["C", "Db", "D", "Eb", "E", "F", "Gb", "G", "Ab", "A", "Bb", "B"]; 
    return text.replace(/[CDEFGAB]#?/g, 
    function(match) { 
     var i = (scale.indexOf(match) + shift) % scale.length; 
     return scale[i < 0 ? i + scale.length : i]; 
    }); 
}); 

$('#chordpro').html(newtext); 

는 바이올린에 대한 링크입니다 그것에 대한 정규식이 아니라 원래 text 문자열)

+0

완벽하게, 나는 무릎 꿇었다. 그것은 논리 문제였습니다. 나는 그것을 보지 않고 있었다! 감사! – user2332467

관련 문제