Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   str.Replace: замена подстроки только, если она не содержит определенных подстрок (http://www.flasher.ru/forum/showthread.php?t=128719)

Аллиас 15.08.2009 14:29

str.Replace: замена строки только, если она не содержит определенных подстрок
 
Здравствуйте. Ситуация такая:

Я пишу парсер BBCode в HTML (в первый раз), и столкнулся с проблемой преобразования символа перехода на новую строку в <br /> (HTML то не воспринимает \n как указание к переходу на новую строку), поэтому я сначала попробовал заменить все \n на <br> следующим выражением:
Код AS3:

str = str.replace(/\n/gims, "<br />\n");

но обнаружилось, что после блочных тэгов такая замена добавляет ненужную строку, следовательно необходимо такое выражение для replace, которое бы заменяло \n на <br>\n только в тех строках которых перед \n нету [hr] (конвертируется в <hr> ) или [/spoiler] (конвертируется в <div>).
По совету udaaff, я понял что для такой проверки нужно использовать "негативную группу просмотра вперед" (не совсем понимаю этот термин), но мои эксперименты результатов почему-то не принесли:
Код AS3:

str = str.replace(/(?!\[\(hr|\/spoiler)\])\n/, "<br />\n");
//теоретически должно выполнять замену \n на <br>\n только если перед этим самым
//\n не находится [hr] или [/spoiler], на практике не работает ;(

Не подскажите как мне исправить выражение так, чтобы все работало?

silin 15.08.2009 23:24

попробуй так
Код:

/(?<!(\[hr\])|(\[\/spoiler\]))\n/


Часовой пояс GMT +4, время: 14:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.