Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите как вставить данные в массив? (https://javascript.ru/forum/misc/40121-podskazhite-kak-vstavit-dannye-v-massiv.html)

Kvark 24.07.2013 14:27

Подскажите как заменить в строке значения между маркерами?
 
Привет, есть веб страница с ява скриптом (рисует по данным график)
у меня апликация работает на яве тоже, и умееть отображать в контейнере эту страницу, изначально в странице указан начальный масив даных что бы было что рисовать. В базе даных страница храница построчно, тоесть массивом - елемент = строка.

Я из апликации хочю заменить блок данных на свой. Как это проще всего сделать? Перед выводом массив соединяю join.

брутально решение представляю так:
вставить маркер перед заменяемыми даными: //![ и вконце //!]

Прогнать все елементы массива через проверку, и если не найден маркер - складывать в выходящию переменую, если найден первый маркер - вставить свой блок данных в переменную, не добавлять данные пока не будет обнаружен второй маркер.

Но как то громоздко получаеться :( может кто подскажет решение попроще? Что то типа с репласе - но не сображу как им задать диапозон на вырезку

skrudjmakdak 24.07.2013 14:33

можно узреть код, что бы было хоть чуть-чуть понятнее...))

Kvark 24.07.2013 14:42

В самом коде смысла нету но приведу что бы было наглядней что я хочю сделать, есть такое:
//![
//colors for drawings 
var colorspal = ['red', 'blue', 'green', 'purple', 'orange', 'aqua', 'gold', 'gray'];
//status captions
var scaptions = ["Very bad", "Amiss", "Poorly", "Illy", "Commonly", "So so", "Good", "Fine", "Perfect", "Outstanding"];
//status colors
var scolors = ["#CD0A31", "#F43445", "#F44C34", "#F47634", "#F49C34", "#F4C934", "#F4F434", "#D5F434", "#AEF434", "#5BBE3C"];
//!]

мне нужна подсказка как сделать замену всего того что между //![ и //!] бо количество строк между ними может быть разное

skrudjmakdak 24.07.2013 15:09

если вы хотите изменить именно код js, то я думаю без eval'ов не обойдется...
а найти этот блок можно с помощью регулярки

skrudjmakdak 24.07.2013 15:10

и что то мне подсказывает.. что вы хотите, немного извращение.. ИМХО))

edison 24.07.2013 15:22

заменой по регулярке, я же как понимаю все эти данные в строке
/\/\/!\[[\d\s\D]*?\/\/!\]/
ну или вместо [\d\s\D] - . но с модификатором s

Kvark 24.07.2013 15:43

да по регулярке - тока я не знаю как ее собрать :)

skrudjmakdak 24.07.2013 16:55

ну вам же edison показал готовую регулярку..
var str = '\
//![\n\
//colors for drawings \n\
var colorspal = [\'red\', \'blue\', \'green\'];\n\
//status captions\n\
var scaptions = ["Very bad", "Amiss", "Poorly", "Illy", "Commonly", "So so", "Good", "Fine", "Perfect", "Outstanding"];\n\
//status colors\n\
var scolors = ["#CD0A31", "#F43445", "#F44C34", "#F47634", "#F49C34", "#F4C934", "#F4F434", "#D5F434", "#AEF434", "#5BBE3C"];\n\
//!]\ ';

console.log(str);
var str = str.replace(/\/\/!\[[\d\s\D]*?\/\/!\]/, 'new text');
console.log(str);

Kvark 24.07.2013 17:19

да, спасибо, подошло, я ответил просто невнятно, мол до того как он показал чувствовал что как то можно, но незнал как конкретно, для меня регулярка темный лес, но вот уже с вашей помощью начинаю разбираться


Часовой пояс GMT +3, время: 23:07.