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) 

И что мне нужно, чтобы сократить его в очередях и поместить их в один массив, после того, что я должен отделяют каждое число, а остальные - в строке. Я получаю сумасшедшие функции поиска, чтобы сделать это, но теперь я не вижу никого в Javascript.

модифицированный

End Предусмотренный формат будет первым следующий:

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

Тогда я хочу взять его и извлечь каждую строку в некоторых Варс использовать их:

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

(вары будут повторно использоваться с каждой линией)

+2

Какой выход вы ожидаете? – Sarfraz

+0

Так или иначе вам нужно регулярное выражение, можете ли вы опубликовать ожидаемый результат? – Pablo

+0

Есть много строк уже. Какие данные вы хотите извлечь? –

ответ

1

Это будет работать что-то вроде этого (try it out, печати результирующего массива объектов в формате JSON) :

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.

+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 для вашего времени –

Смежные вопросы