// Формируем переводы строк (<br />) игнорируя <pre>...</pre>. str = str.replace(/(?!\<pre\>(.*?))\n((.*?)?!\1)/gim, "<br />"); Работает. Осталось по аналогии исключить списки и добавить такое поведение для параграфов. upd: Не работает >.< |
Почему такая конструкция работает: apple(?!y) — исключает appley, а такая (?!y)apple — нет (не исключает yapple)?
Каков аналог второй конструкции? |
Цитата:
|
До сих пор бьюсь над задачей исключения блочных тегов из парсера.
Решил отказаться от регулярок (центральное «яблоко» всё равно заменяется в этом правиле): 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); Почему счётчик не работает? |
Цитата:
|
Цитата:
http://javascript.ru/forum/misc/2333...tml#post138012 |
Вам нужно, чтобы теги <p> не расставлялись внутри других тегов?
|
Цитата:
Поэтому я хочу исключить их из парсера вообще. |
Может, это вам поможет... Расставляет br-ки только вне скобок.
str="Bla-bla,\n<bla-bla-bla, <pre>bla-bla,\n bla-bla-bla</pre>, bla-bla\n, mr. Freeman"; alert(str.replace(/\n(?![^<]*?\<\/)/g, "<br>")); |
Часовой пояс GMT +3, время: 09:50. |