Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с регулярным выражением (https://javascript.ru/forum/misc/22304-problema-s-regulyarnym-vyrazheniem.html)

alexey33 14.10.2011 12:40

Проблема с регулярным выражением
 
Помогите разобраться в одном паттерне.

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

много вариантов перепробывал - не могу понять где недочет в паттерне :-?

текст примера:
<html>
<head>
<script language="JavaScript">
  function changeTxt() {
	var str = document.getElementById('txt').value;
	document.getElementById('txt').value = str.replace(/\<ul\>([\s\S]*)\<\/ul\>/gim, '<div style="padding-left:10px"><ul>$1</ul></div>');
  }
</script>
</head>

<body>

<textarea id="txt" rows="15" cols="50" >
<ul>
<li>one</li>
<li>two</li>
<li>three</li>
</ul>

<ul>
<li>one</li>
<li>two</li>
<li>three</li>
</ul>
</textarea>

<input type='button' value='Run RegExp' onClick="changeTxt();">

</body>
</html>

Riim 14.10.2011 13:34

Почитай про жадность в regexp-ах. Вот здесь вроде нормально расписано.

Триви 14.10.2011 14:01

/\<ul\>([\s\S]*?)\<\/ul\>/

alexey33 14.10.2011 14:15

наконец-то нашел решение ! не хватало одного знака вопроса :)

вот верный паттерн:
/\<ul\>([\s\S]*?)\<\/ul\>/gim

Riim, спасибо за наводку

alexey33 14.10.2011 14:17

Триви опередил :)


Часовой пояс GMT +3, время: 20:35.