Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > RegExp на все строки


Автор: InfMag 31.5.2010, 09:23
Доброго времени суток!

Возникла задача - применить мой RegExp на все строки, не по очереди, а сразу обработать всё одним регом.

Вообще для чего это делается: есть сайт на аяксе, есть страницы при показе которых должен выполняться каждый раз определённый код, страницы кешируются, создаются при запросе для каждой страницы отдельные блоки и скрываются все, кроме активного. Код нужно выполнять каждый раз как показывается блок, при загрузке всё ок, код выполняется, а при показе его выполнять так и так нужно отдельно, есть такой html код:
Код

<script type="text/javascript">
   /*<ajax>*/
   (function($){
      document.title = 'Строительные смеси / Продукция / Сайт ООО «Актив»'
   })(jQuery)
   /*</ajax>*/
</script>

Нужно взять всё между /*<ajax>*/ и /*</ajax>*/, рега по идее такая: 
Код

/\/\*\<ajax\>\*\/(.*)\/\*\<\/ajax\>\*\//i

Ключ m - мультисроковый пробовал, не помогло, вся проблема в том - что дальше текущей строки он за раз никак не уходит.

Автор: InfMag 31.5.2010, 10:04
Поправлюсь, забыл добавить вариант перевода строк:
Код

/\/\*\<ajax\>\*\/([.\s]*)/

Но он всё-равно не уходит дальше текущей строки, только захватывает символ перевода строки, не зависимо от наличия или отсутствия ключа m

Автор: ksnk 31.5.2010, 10:26
Код

/\/\*\<ajax\>\*\/((\n|\r|.)*)\/\*\<\/ajax\>\*\//i

есть свои тараканы у javascaript'а. Модификатор m как-то очень по своему работает...

Автор: InfMag 31.5.2010, 12:54
Спасибо, но я нашёл более элегантное решение, правда после неоднократных ударов головой об стену, с начала было так:
Код

/\/\*<ajax>\*\/([^]*?)\/\*<\/ajax>\*\//ig

Nice! Работает, всё прекрасно, но тут вдруг я вспоминаю про мордор, а именно IE, ни в одном ни работает, он думает что я за символ беру ] и просит закрыть промежуток... Ещё несколько ударов об стену и я угодил мордору майкрософту:
Код

/\/\*<ajax>\*\/([^\0]*?)\/\*<\/ajax>\*\//ig


Кстати ключ g + *? (ограничение жадности) дают мне вариант многократно собирать код.

Добавлено через 4 минуты и 42 секунды
А флаг m всецело бесполезен и вообще побочно-ненужный. Хотя правильнее сказать - он делает ровно ничего.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)