Как победить жадность 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> Как можно заставить регулярку найти все совпадения, а не только последнее? |
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>'); |
Часовой пояс GMT +3, время: 11:18. |