До сих пор бьюсь над задачей исключения блочных тегов из парсера.
Решил отказаться от регулярок (центральное «яблоко» всё равно заменяется в этом правиле):
str ="apple <pre>apple apple apple</pre> apple";
str = str.replace(/(?:^|[^(\<pre\>)])apple([^(\<\/pre\>)])/g, "sword");
alert(str);
И перейти к массиву. Сохранить все блочные элементы в массив, заменить из заглушками, обработать текст и вставить блоки обратно.
Но снова непонятности:
str ="<pre>apple</pre><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);
Почему счётчик не работает?