2017-03-19 12 views
0

結果の正規表現から詳細を取得する方法:私はテスト文字列を持っているここではJavaScript

apple 01x100 02x200 03x150 
banana 01x50 02 03x10 

私は結果として欲しい:

{ "apple" : { "100":["01"], "200":["02"], "150":["03"] }, 
    "banana" : {"50":["01"], "10":["02","03"]} 

私は解析するJavaScriptで正規表現を使用しようとしています文字列。正規表現文字列

/(apple|banana)((?:\s)*(?:(?:[0-9]+)(?:\s)*)*x(?:[0-9])+)+/gi 

結果:ご覧のとおり

Match 1 
Full match 0-26 `apple 01x100 02x200 03x150` 
Group 1. 0-5 `apple` 
Group 2. 19-26 ` 03x150` 

Match 2 
Full match 27-48 `banana 01x50 02 03x10` 
Group 1. 27-33 `banana` 
Group 2. 39-48 ` 02 03x10` 

、マッチ1に - グループ2、唯一03x150ショーは、01x100及び02x200はありません。完全一致ではすべてを表示します。これを修正し、私が望む結果を得るための考え?私はこれがあなたのために働くだろうと思いおかげ

+0

'02'は、最終的な出力にキー '10'に関連付けられますこれによってルールは何ですか? –

+0

01は品質の種類を意味し、100は数量を意味します。また、02は品質を意味し、10は数量を意味します。この場合、バナナタイプ02と03は同じ量を得ます – boygiandi

答えて

0

const input = ` 
 
apple 01x100 02x200 03x150 
 
banana 01x50 02 03x10 
 
lemon 02x12 15 16 17x21 
 
` 
 

 
const parse = data => { 
 
    const obj = {} 
 
    const findFruits = /(\w+)\s+(.*)/g 
 
    const findMore = /\s*([\d\s]+)x(\d+)/g 
 
    let temp 
 
    while (temp = findFruits.exec(data)) { 
 
     const tempObj = obj[temp[1]] = {} 
 
     const temp2 = temp[2] 
 
     while (temp = findMore.exec(temp2)) { 
 
      tempObj[temp[2]] = temp[1].split(' ') 
 
     } 
 
    } 
 
    return obj 
 
} 
 

 
const out = parse(input) 
 
console.log(out)

+0

私はアイデアが一度ではなく、何回も、正規表現を実行して参照してください – boygiandi

関連する問題