2014-11-17 4 views
0

특정 문자열의 모든 변형을 가져오고 싶습니다. 이 문자열은 대시로 구분됩니다. 그리고 편지는 그 대시 안에서만 변할 수 있습니다.문자열의 모든 변형을 얻으십시오.

FI3-334-G12 
FI3-334-F12 
FI3-334-FG2 
FI3-334-FG1 
DI3-334-G12 
DI3-334-F12 
DI3-334-FG2 
DI3-334-FG1 
DF3-334-G12 
DF3-334-F12 
DF3-334-FG2 
DF3-334-FG1 
DFI-334-G12 
DFI-334-F12 
DFI-334-FG2 
DFI-334-FG1 

사람이 지원할 수있다 : 예를 들어

, 이제 내가 예를 들어 해당 문자열의 모든 변형을 얻으려면 다음 DFI3-334-FG12을 통과 가정 해 봅시다? 나는 루프를 시도했지만 난 단지 그것을 파괴하고 다른 그것의 일부 점점 늘어나는만큼 얻을 : 이것은 내 코드입니다

FI3,DI3,DF3,DFI 
334 
G12,F12,FG2,FG1 

을 :

 $('#filter').on('click',function() { 
      var input = $('#code').val(); 
      var parts = input.split("-"); 
      var fixed = Array(); 
      for(var i=0;i<parts.length; i++) { 
       if(parts[i].length != 3) { 
        k = 0; 
        fixed[i] = new Array(); 
        for(var c=0;c<parts[i].length;c++) { 
         fixed[i][k] = parts[i].replace(parts[i].charAt(c),""); 
         k++; 
        } 
       } else { 
        fixed[i] = parts[i]; 
       } 
      } 
      var final = Array(); 
      $.each(fixed,function(i) { 
       $('#code_result').append(fixed[i] + "<br>"); 
      }) 
     }); 
+0

regex가 왜 캡처 그룹의 필요성 때문에이 문제를 쉽게 해결할 수 없는지 상상할 수 없지만, 변형을보다 간결하게 정의하지 않으면 간결한 대답을 제공하기가 어렵습니다. – Sidney

답변

0
var string= 'DFI3-334-FG12'; 
    var parts = string.split('-'); 
    for(var i=0;i<parts[0].length;i++) 
     for(var j=0;j<parts[2].length;j++){ 
      p1 = parts[0].substring(0,i)+parts[0].substring(i+1,parts[0].length); 
      p2 = parts[2].substring(0,j)+parts[2].substring(j+1,parts[2].length); 
      console.log(p1+'-'+parts[1]+'-'+p2);  
     } 
+0

이 예에서는 작동하지만 문자열은 '4DF-34D3-93F' 일 수도 있습니다. 4 문자는 첫 번째 및 마지막 '섹션'에만 국한되지 않으므로 3 문자 모두 4 자 또는 2 자 또는 1이 될 수 있습니다. – Albert

+1

질문이 명확하지 않습니다. 설명을 잘 설명해야합니다. 도와주세요. – OnlyMAJ

+0

또한 내 대답을 업데이트하고 확인하십시오. – OnlyMAJ

0

당신이 알고있는 경우에 얼마나 많은이 세그먼트 (이 경우 3 개)이면 모든 가능한 조합을 얻기 위해 루프를 사용할 수 있습니다.

for(var i=0; i<parts[0].length; ++i) { 
    for(var j=0; j<parts[1].length; ++j) { 
     for(var k=0; k<parts[2].length; ++k) { 
      strings.push(parts[0][i]+'-'+parts[1][j]+'-'+parts[2][k]); 
     } 
    } 
} 

그리고 당신이 알 수 있도록

http://jsfiddle.net/a6647m9e/1/, 당신은 빈 조합을 복용 (2^parts[0].length - 1) * (2^parts[1].length - 1) * (2^parts[2].length - 1) 조합 (이 경우 1575)에서 찾고 :

여기 내 예를 참조하십시오.

참고 : 이것은 "모든 가능한 조합"의 정의에 따라 다릅니다.

+0

나는 내가 원하는 것을 보여 주었다. 이것은 가깝지 않습니다. – Albert

+0

그럴 경우 예제는 일부 조합 만 원하지만 다른 조합은 원하지 않는다고 알려줍니다. 당신이 원하는 것을 우리에게 말해주는 것은 당신에게 달려 있습니다. "가까이에 말하지 마라"라고 말하지 마십시오. –

관련 문제