Хотя в том варианте у меня плохо обрабатывал он такой вариант:
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