Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Replace и функция (https://javascript.ru/forum/misc/23419-replace-i-funkciya.html)

ksevelyar 22.11.2011 20:53

Replace и функция
 
Хочу сохранить все блочные элементы в массив, заменить из заглушками, обработать текст и вставить блоки обратно.

Но счётчик не увеличивается. Почему? Я читал что обращение к функции идёт при каждом совпадении.

Я хочу вывод: dummy0 and dummy1

Получаю: dummy0 and dummy0

str ="<pre>apple</pre> and <pre>orange</pre>";

 blocks = /\<(h[1-6]|pre|div|ul|)\>([\s\S]*?)\<\/\1\>/gi;   

 i=0;
 var tmp_blocks = new Array();    
    
 str = str.replace(blocks, storeblocks);
 
 function storeblocks(x) {
          tmp_blocks[i] = x; 
          return "dummy"+i;
          i=i++;  
}

alert(str);

trikadin 22.11.2011 21:00

Цитата:

Сообщение от ksevelyar
i=i++;

Из-за вот этого откровенного бреда. Вы вообще знаете, как действует оператор инкремента?

рони 22.11.2011 21:04

ksevelyar,
до увеличения i никогда не доходит ... строка 12 это конец вашей функции
Рабочий вариант ...
str ="<pre>apple</pre> and <pre>orange</pre>";

 blocks = /\<(h[1-6]|pre|div|ul|)\>([\s\S]*?)\<\/\1\>/gi;

 i=0;
 var tmp_blocks = new Array();

 str = str.replace(blocks, storeblocks);

 function storeblocks(x) {
          tmp_blocks[i] = x;
          return "dummy"+i++;

}

alert(str);

trikadin 22.11.2011 21:09

рони, а, ну да. Просто такое извращение поразило меня в самое сердце, и остальное я уже не замечал)

ksevelyar 22.11.2011 22:25

Цитата:

Сообщение от рони (Сообщение 138409)
ksevelyar,
до увеличения i никогда не доходит ... строка 12 это конец вашей функции
Рабочий вариант ...
...
          return "dummy"+i++;
}...

Спасибо. Я думал что функция заканчивается не после «return», а после «}».


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