Показать сообщение отдельно
  #14 (permalink)  
Старый 19.01.2012, 21:09
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Вот самый лучший и качественный вариант, работает без ошибок и начинает действовать с середину, то-есть с вложенных а уж потом обрабатывает родительские теги.
var text = 'test [b=color]bold[/b] tatata [b]blah[/b] tata [code run]function(){}[/code] tar [quote]blah blah [i]ta[i]r[/i]am[/i] param[/quote]';
  
function parseBBCode( text ) {
    return text.replace( /\[(([a-z]+)(?:(?:\=|\s)([^\]]+))?)\](.*)/gi, function( all, tagAttr, tag, attr, end ) {
        var re = new RegExp( "(.*?)(\\[\\/(" + tag + ")\\]|\\[([a-z]+.*?)\\])(.*)", "i" );
        return parseBBCode( end.replace( re, function( subAll, content, tags, closeTag, openTag, subEnd ) {
            if ( openTag ) {
                return '[' + tagAttr + ']' + parseBBCode( subAll );
            } else {

                // tag - содержит имя тега BBCode
                // tagAttr - содержит и тег и его атрибут(ы)
                // attr - трибут(ы) текущего тега
                // content - собственно содержимое этого тега

                alert( [ tagAttr, content, closeTag ].join("\n") );
                return '<' + tag + '>' + content + '</' + closeTag + '>' + subEnd;
            }
        }));
    });
}
  
alert( parseBBCode( text ) );

Последний раз редактировалось devote, 19.01.2012 в 21:43.
Ответить с цитированием