2010-12-30 7 views
1

Nun, ich habe diesen Text in einem Javascript Var:Parsing Klardaten mit 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) 

und was ich brauche, ist es in den Zeilen zu schneiden und sie in einem Array setzen, dass, nachdem ich muß Trennen Sie jede Nummer und den Rest in einer Zeichenfolge. Ich werde verrückt Suchfunktionen, um das zu tun, aber jetzt kann ich niemanden in Javascript sehen.

modifizierte

End erwartet Format zuerst wird der nächste:

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

Dann will ich es nehmen und extrahieren jede Zeile in einigen Vars sie zu benutzen:

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

(Die Variablen werden mit jeder Zeile erneut verwendet.)

+2

Welche Ausgabe erwarten Sie? – Sarfraz

+0

Auf die eine oder andere Weise brauchen Sie Regex, können Sie die erwartete Ausgabe veröffentlichen? – Pablo

+0

Es gibt schon viele Zeilen. Welche Daten möchten Sie extrahieren? –

Antwort

1

Es wäre so etwas wie dies funktionieren (try it out, Drucken des resultierenden Array von Objekten in JSON-Format) :

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] 
     }); 
    } 
} 

Dann können Sie zum Beispiel Zugriff auf der roten Wert Kanal mit colors[0].red ersten Farbe.

+0

Dies ist die beste Antwort, danke dafür. –

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

ich denke, das funktionieren könnte:

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; 
} 

, dass Sie ein Array geben sollte, wobei jedes Element des Arrays ein Objekt mit den Farben aus dem Text aufzuschlüsseln sind. Wenn Sie die Farben in einem Array wollen, würden Sie, dass „rv.push“ -Linie mit ersetzen:

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

Gute Antwort auch, danke für Ihre Zeit –

1

Ich lief das und es funktioniert ganz gut.

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

Gute Antwort auch, danke für Ihre Zeit –