Показать сообщение отдельно
  #5 (permalink)  
Старый 18.10.2010, 11:32
Новичок на форуме
Отправить личное сообщение для smollvrn Посмотреть профиль Найти все сообщения от smollvrn
 
Регистрация: 11.06.2010
Сообщений: 9

нет,
скрипт заменяет html теги на ббкод , проблема с дивами и спанами,
их замену произвожу в цикле ,чтоб сначала заменялся самый вложенный, чтоб легко было отловить закрытие тега
так как может быть конструкция <div...>...<div...>...</div><div>
поэтому замена должна произойти если за открывающим дивом не следует еще один открывающий,т.е. ищем самый вложенный див

([^<]*?) позволял не производить замену если за открывающим дивом есть символ открытия тега , так это работало , но в диве может быть другой тег , который не влияет на дивы, поэтому перестало устраивать..

а нужно чтоб проверялось наличие последовательности <div ,
[^<div] не подходит , так как будет исключать не последовательность а любой из символов


считаю что можно как-то средствами регулярного выражения это сделать т.е. грамотно оформить это <div>([\s\S]*?[^(<div)])</div>

<div>([\s\S][^(<div)]*?)</div>
т.е. совпадение должно быть найдено и переменная сохранена , если между открывающимся и закрывающимся дивом ( символы между дивами любые , включая разрыв строки , количество не известно, поиск ленивый ( до первого закрывающегося дива)) не будет открывающиегося дива

сейчас думаю делать через функцию ,т.е. при совпадении будет выполнятся функция в которой и будет проверятся test'ом наличие дива в переменной,
function finddiv(str, p1, p2, offset, s) 
{ 
var divreg = /<div/i
if (divreg.test(p2)){
//если див есть восвращаем исходное состояние
return spanbb 
}
else {
//если дива нет то
return "[spoiler="+p1+"]"+p2+"[/spoiler]
}
}
spanbb = spanbb.replace(/<div class="sp-wrap">(?:[\s\S]*?)<div class="sp-body" title="([\s\S]*?)">([\s\S](*?)<\/div>(?:[\s\S]*?)<\/div>/img, finddiv);
Ответить с цитированием