2010-12-30 2 views
1

まあでプレーンデータの解析、私はJavascriptをVarのこのテキストを持っている:はJavascript(jQueryの)

GIMP Palette 
Name: Named Colors 
Columns: 16 
# 
255 250 250 snow (255 250 250) 
248 248 255 ghost white (248 248 255) 
245 245 245 white smoke (245 245 245) 
220 220 220 gainsboro (220 220 220) 
255 250 240 floral white (255 250 240) 
253 245 230 old lace (253 245 230) 
250 240 230 linen (250 240 230) 
250 235 215 antique white (250 235 215) 
255 239 213 papaya whip (255 239 213) 

そして、私は必要は、私がしなければならないの後、行にそれをカットし、1つのアレイでそれらを置くことですそれぞれの数字と残りは文字列で区切ります。私はそれを行うために狂った機能を探していますが、今は私はJavascriptで誰も見ることができません。

array[0]='255 250 250 snow (255 250 250)' 

その後、私はそれを取ると、それらを使用するためにいくつかのvarsに各行を抽出したい:

colour[0]=255; 
colour[1]=250; 
colour[2]=250; 
string=snow (255 250 250); 

は、エンドはフォーマットが最初に次のことが期待

を修正しました(行は各行で再使用されます)

+2

あなたはどのような出力を期待していますか? – Sarfraz

+0

一方的に、あるいは正規表現が必要な場合は、期待される出力を投稿できますか? – Pablo

+0

すでに多くの行があります。どのデータを抽出しますか? –

答えて

1

それは(JSON形式のオブジェクトの結果の配列を印刷し、try it out)このような何かを働くだろう:

var lines = text.split('\n'), 
    colors = []; 

for(var i = 0; i < lines.length; ++i) { 
    var splitLine = lines[i].match(/^(\d+)\s+(\d+)\s+(\d+)\s+(.*)/); 
    if(splitLine) { 
     colors.push({ 
      red: +splitLine[1], 
      green: +splitLine[2], 
      blue: +splitLine[3], 
      colorName: splitLine[4] 
     }); 
    } 
} 

次に、あなたは、例えば、colors[0].redを使用して第1の色の赤チャンネル値にアクセスすることができます。

+0

これは最高の答えです。ありがとうございます。 –

0
var color = array[i].replace(/\s+/g,' ').split(' '); 
var str = color.splice(-4).join(' '); 
console.log(color); console.log(str); 
1

私は、これはうまくいくかもしれないと思う:

function cvtGimpPalette(p) { 
    var oneline = /^(\d+)\s+(\d+)\s+(\d+)\s+(.*)$/g; 
    var rv = []; 
    p.replace(oneline, function(_, r, g, b, comment) { 
    rv.push({ r: r, g: g, b: b, string: comment}); 
    }); 
    return rv; 
} 

あなたの配列は、テキストから分割色で対象となるの各要素を持つ配列を与えるべきであること。あなたは、配列の色をしたい場合は、あなたがその「rv.push」行を置き換えたい:

rv.push({ colours: [r, g, b], string: comment }); 
+0

あまりにも良い答えです。ありがとうございました –

1

これを実行しても問題なく動作します。

var str = "GIMP Palette\n\ 
Name: Named Colors\n\ 
Columns: 16\n\ 
#\n\ 
255 250 250 snow (255 250 250)\n\ 
248 248 255 ghost white (248 248 255)\n\ 
245 245 245 white smoke (245 245 245)\n\ 
220 220 220 gainsboro (220 220 220)\n\ 
255 250 240 floral white (255 250 240)\n\ 
253 245 230 old lace (253 245 230)\n\ 
250 240 230 linen (250 240 230)\n\ 
250 235 215 antique white (250 235 215)\n\ 
255 239 213 papaya whip (255 239 213)"; 

var reg = /(\d{1,3}) (\d{1,3}) (\d{1,3}) (.+ \(\d{1,3} \d{1,3} \d{1,3}\))/, 
    pieces = str.split('\n'), 
    match, 
    result = []; 

for (var i = 4; i < pieces.length; i++) { 
    match = reg.exec(pieces[i]); 
    if (match !== null) { 
     result.push({ 
      r: +match[1], 
      g: +match[2], 
      b: +match[3], 
      string: match[4], 
      toString: function() { 
       return this.r + " " + 
        this.g + " " + 
        this.b + " " + 
        this.string; 
      } 
     }); 
    } 
} 

alert(result); 

JS Fiddle Source

+0

あまりにも良い答え、あなたの時間のためのthx –