Javascript.RU

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

Как победить жадность RegExp?
Всем привет! Прошу помочь с regexp'ами.

Есть строка, содержащая такой HTML-код:
<li><i class="remove" title="Удалить"></i><span class="comment">Комментарий</span><img src="img/slider/b/5251.jpg"></li>
<li><i class="remove" title="Удалить"></i><span class="comment">Комментарий</span><img src="img/slider/b/6865.jpg"></li>
<li><i class="remove" title="Удалить"></i><span class="comment">Комментарий</span><img src="img/slider/b/7435.jpg"></li>

Мне необходимо изменить её на такую:
<td><p><img src="img/slider/b/5251.jpg"><i></i></p></td>
<td><p><img src="img/slider/b/6865.jpg"><i></i></p></td>
<td><p><img src="img/slider/b/7435.jpg"><i></i></p></td>

Для этого я применил регулярное выражение:
var path = /.*img\/slider\/b\/([^>]*)(\.png|\.gif|\.jpg).*/gm;
var newStr = oldStr.replace(path, '<td><p><img src="img/slider/b/$1$2"><i></i></p></td>');

И оно работает хорошо, пока не нарушается форматирование HTML-кода.

Но если HTML выстраивается в одну строку без переносов (у меня это происходит из-за сортировки картинок с помощью JQuery UI Sortable):
<li><i class="remove" title="Удалить"></i><span class="comment">Комментарий</span><img src="img/slider/b/5251.jpg"></li><li><i class="remove" title="Удалить"></i><span class="comment">Комментарий</span><img src="img/slider/b/6865.jpg"></li><li><i class="remove" title="Удалить"></i><span class="comment">Комментарий</span><img src="img/slider/b/7435.jpg"></li>

То совпадения тоже оказываются на одной строке, и жадные регулярки заменяют всю эту строку на один тег <td> с последней по счету картинкой:
<td><p><img src="img/slider/b/7435.jpg"><i></i></p></td>

Как можно заставить регулярку найти все совпадения, а не только последнее?
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2011, 04:11
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

var path = /.*?img\/slider\/b\/([^>]*)(\.png|\.gif|\.jpg).*?(?:<\/li>)/gm;
oldStr.replace(path, '<td><p><img src="img/slider/b/$1$2"><i></i></p></td>');

Последний раз редактировалось Андрей Параничев, 28.08.2011 в 04:14.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Как сделать такое fancy menu uonax Элементы интерфейса 2 22.05.2010 12:52
Как узнать, присутствует ли в окне полоса прокрутки или нет? возжаждавший Элементы интерфейса 6 12.03.2010 23:00
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56
RegExp и unicode Yury900 Общие вопросы Javascript 7 13.05.2008 00:19