Есть такой код:
var replacements = {
    '<strong>$1</strong>': /\*\*(.+)\*\*/g,
    '<em>$1</em>': /\*(.+)\*/g,
    '<a href="$1">$2</a>': /\[([^\s"]+) (\w+)\]/g,
    '<a href="$1">$1</a>': /(https?:\/\/(?:www\.)?\w+(\.\w+)*(?::\d+)?(?:\/[^\s]*)?)/g
}
window.addEventListener('load', function() {
    var body = ge('body');
    
    body.onkeypress = body.onkeyup = function() {
        var v = val(this);
        v = stripTags(v);
        
        for (var x in replacements) {
            v = v.replace(replacements[x], x);
        }
        
        v = v.replace(/\r\n|\r|\n/g, '<br>');
        val('preview', v);
    }
}, false);
Вводишь в текстовое поле *test*
он в диве отображает
test
Вопрос #1: 
Почему 
*
test
*
Не отображается наклонным? Ведь используется модификатор 'g'
#2 Негативный просмотр
// Если попытаться использовать вместо этого
'<a href="$1">$1</a>': /(https?:\/\/(?:www\.)?\w+(\.\w+)*(?::\d+)?(?:\/[^\s]*)?)/g
// Регулярку с негативным просмотром, то все отказывается работать
/(?<!\[)(https?:\/\/(?:www\.)?\w+(\.\w+)*(?::\d+)?(?:\/[^\s]*)?)/g
Как бы для ссылок
[
http://site.ru Ссылка]
Чтобы не было конфликтов