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

Хотя в том варианте у меня плохо обрабатывал он такой вариант:
test [b=color]bold[/b] tatata [b]blah[/b] tata

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

var text = 'test [b=color]bold[/b] tatata [b]blah[/b] [code run]function(){}[/code] tar [quote]blah blah [i]ta[i]r[/i]am[/i] param[/quote]';
  
function parseBBCode( text, greed ) {
    var re = new RegExp("\\[(([a-z]+)(?:(?:\\=|\\s)([^\\]]+))?)\\](.*" + ( greed ? '' : '?' ) + ")\\[\\/\\2\\]", "gi");
    return text.replace( re, function( all, tagAttr, tag, attr, content ) {
 
        // tag - содержит имя тега BBCode
        // tagAttr - содержит и тег и его атрибут(ы)
        // attr - трибут(ы) текущего тега
        // content - собственно содержимое этого тега

        return '<' + tagAttr + '>' + parseBBCode( content, greed ) + '</' + tag + '>';
    });
}
  
alert( parseBBCode( parseBBCode( text ), true ) );


в реге вместо [a-z]+ можно написать только разрешенные теги, типа:
b|i|u|img|code

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