2011-04-06 2 views
1

일부 요소는 고정되어 있고 일부는 선택 가능합니다. 예를 들어의 내 문자열이 식료품 목록입니다 가정 해 봅시다 :문자열을 여러 문자열 그룹으로 나누기

"strawberry, raspberry, $2{tomato, sauerkraut, beans}, 
potato, $1{{apple, pear}, {orange, banana}}" 

그리고 내가 좋아하는 뭔가 끝내고 싶습니다

["strawberry", 
"raspberry", 
[2, "tomato", "sauerkraut", "beans"], 
"potato", 
[1, ["apple", "pear"], ["orange", "banana"]] 

내가 그래서 여기에 여러 선택 사항을 해결할 수있는 방법을 몰라 나는 모든 제안에 열려 있습니다. 또한 "구문"(예 : "$[num of coices]{list}")을 수정하고 보풀을 추가/삭제할 수 있습니다. 실제로 중요하지 않습니다. 더 간단하게 장인! :]

편집 :! ... :(

감사

+0

가 실제 생활 예와 무엇을 위해 사용되며 사랑스러운겠습니까 문자열 그것은 플레이어의 캔 선택한 게임 (예)가있는 경우의 문자 생성을 자동화하기위한 것입니다 – mplungjan

+0

출처 군사 학교 또는 민간 학원에 가십시오. 그들이 선택한 경로 (및 다른 것들)에 따라 고정 보상과 "X 선택"유형의 묶음을 나누어주는 여러 가능한 결과가 있습니다. 이러한 보상은 현재 한 개의 문자열에 저장되어 있습니다. 그것들을 재 작업하는 것이 중요한 피타이기 때문에 어떻게 든 나눌 수 있기를 바라고 있습니다. – Kenny

답변

4

가 왜 다른 해결책이없는 경우를 제외하고 나는이 목록의 bazillions 위의 형식으로 손으로 그들을 변환 옵션을 선택하지 않습니다이 't 당신이에 대한 JSON를 사용

var list = ["strawberry", 
    "raspberry", 
    [2, "tomato", "sauerkraut", "beans"], 
    "potato", 
    [1, ["apple", "pear"], ["orange", "banana"]]]; 

var str = JSON.stringify(list); 
/* 
str = '["strawberry","raspberry",[2,"tomato","sauerkraut","beans"],"potato",[1,["apple","pear"],["orange","banana"]]]' 
*/ 

var list2 = JSON.parse(str); 
/* 
list2 = ["strawberry", 
     "raspberry", 
     [2,"tomato","sauerkraut","beans"], 
     "potato", 
     [1, ["apple","pear"], ["orange","banana"]]] 
*/ 
+0

jQuery [$ .parseJSON] (http://api.jquery.com/jQuery.parseJSON/)에서도 가능합니다 - [테스트 케이스] (http://jsfiddle.net/yahavbr/GBFKJ/) –

+0

고마워,하지만 깜빡 했어. 언급 할 수 있듯이 필자는 수천 개의 목록을 손으로 직접 변환하는 것을 피하고 싶습니다. – Kenny

+0

@Kenny : 귀하의 질문에 '또한 구문을 수정할 수 있습니다.'- JSON은 *** 직렬 형식의 JavaScript 객체의 *** 표준 형식입니다. –

1

첫째 :?. 난 강력하게 매트에 의해 언급 된 JSON 기반 솔루션을 사용하여을 제안 하지만 어떤 이유에서든 현재 코드를 적용 할 수 없다면 다음을 시도하십시오. 참고 : 다른 테스트 케이스로 테스트하지는 않았지만 아이디어를 줄 것이라고 생각합니다.

var testString = "strawberry, raspberry, $2{tomato, sauerkraut, beans}, potato, $1{{apple, pear}, {orange, banana}}"; 
    testString = testString.replace(/\$(\d+){/g, "{$1,"); 
    testString = testString.replace(/{/g, "[").replace(/}/g, "]"); 
    testString = testString.replace(/\b/g,'"') 
    testString = testString.replace(/(")(\[)/g,'$2$1') 
    testString = testString.replace(/(\])(")/g,'$2$1') 
    testString = '[' + testString + ']'; 
    var obj = JSON.parse(testString); 
    for(var o in obj) 
    { 
     alert(typeof obj[o]); 
    } 

작업 예 : http://jsfiddle.net/PcMhw/4/

+0

고마워요! 이것은 내가 필요로하는 것, 매력과 같은 것입니다! 당신, 친애하는 각하 (또는 레이디)는 단순히 놀랍습니다. – Kenny

+0

나에게 잘 어울립니다. 이 코드를 사용하여 JSON ***으로 데이터를 변환하는 데 사용합니다. ***. –

+0

@Kenny :하지만 문자열의 데이터가 위의 코드를 쉽게 깨뜨릴 수 있다는 점에 유의하십시오. strwawberry (밀짚 베리)의 공간과 같습니다. 물론 시나리오를 처리 할 수 ​​있도록 코드를 향상시킬 수 있지만 더 많은 테스트 사례를 식별 할 때 더 복잡해집니다. 그렇기 때문에 나는 JSON 기반 솔루션에 관심이있다. 위험을 이해하고 있는지 확인하고 싶습니다. – Chandu

관련 문제