Здравствуйте. Ситуация такая:
Я пишу парсер 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], на практике не работает ;(
Не подскажите как мне исправить выражение так, чтобы все работало?