Показать сообщение отдельно
  #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>

Как можно заставить регулярку найти все совпадения, а не только последнее?
Ответить с цитированием