Javascript.RU

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

регулярные выражения js
нужно произвести замену если нет вложенного тега div , не могу придумать как сделать

spanbb = spanbb.replace(/<div class="sp-wrap">(?:[\s\S]*?)<div class="sp-body" title="([\s\S]*?)">([\s\S]*?[^(<div)])<\/div>(?:[\s\S]*?)<\/div>/img, "[spoiler=\"$1\"]$2[\/spoiler]");


т.е. [^] только для символов а не для последовательности насколько понимаю, можно ли как-то для последовательности символов сделать , с заглядыванием вперед тоже не особо получилось , кусок побольше заменяется ....

<div class="sp-body" title="([\s\S]*?)">([\s\S]*?[^(<div)])<\/div> как это правильно реализовать
Ответить с цитированием
  #2 (permalink)  
Старый 17.10.2010, 23:34
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Вы сами хоть понимаете, что написали?

Делайте проверку на наличие дочерних элементов, нормальным путем..

<div id="parent">
    <span></span>
</div>
<script type="text/javascript">
window.onload = function(){
    var elememt = document.getElementById('parent');
    for(i=0; i<elememt.childNodes.length; i++) {
        var chilren = elememt.childNodes[i].tagName;
        if(chilren == 'SPAN'){
            alert(chilren.toLowerCase());
        }    
    }
};
</script>

Срочно читайте:
http://javascript.ru/tutorial/dom/intro
http://javascript.ru/tutorial/dom/search-spec

Последний раз редактировалось monolithed, 17.10.2010 в 23:58.
Ответить с цитированием
  #3 (permalink)  
Старый 17.10.2010, 23:59
Новичок на форуме
Отправить личное сообщение для smollvrn Посмотреть профиль Найти все сообщения от smollvrn
 
Регистрация: 11.06.2010
Сообщений: 9

я прекрасно понимаю что написал , мне нужна реализация регулярными выражениями, у меня была проверка на вложенность тегов
spanbb = spanbb.replace(/<div class="sp-wrap">(?:[\s\S]*?)<div class="sp-body" title="([\s\S]*?)">([^<]*?)<\/div>(?:[\s\S]*?)<\/div>/img, "[spoiler=\"$1\"]$2[\/spoiler]");
которая замечательно работала
т.е. при наличии символа открытия тега "<" ([^<]*?)замена не происходила
сейчас мне нужно исключить не все теги а только тег div, вот я и спрашиваю как это сделать, нужно исключить не наличие в теле спойлера символа открытия тега < , а исключить последовательность <div
Ответить с цитированием
  #4 (permalink)  
Старый 18.10.2010, 00:43
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Это имете ввиду?
alert("<div class=\"sp-wrap\"><\div>".replace(/^<div.*/, '[elem]'));
Ответить с цитированием
  #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);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения klin Javascript под браузер 5 20.07.2010 14:48
Регулярные выражения в JS igsavenko Общие вопросы Javascript 2 18.05.2010 21:33
Функции поиска и замены строк или регулярные выражения? Armen Общие вопросы Javascript 1 01.01.2010 12:35
Регулярные выражения ? grusha jQuery 34 03.03.2009 22:29
регулярные выражения в JS bifidokk Events/DOM/Window 2 02.06.2008 12:29