Сообщение от Gozar
|
[color = red\]bububu[/color] не проблема, ведь мы получаем весь BBcode и можем потом с ним делать что хотим.
|
Ну уж не обязательно за пользователя делать все все все, не валидные BB я б не стал парсить, и обязательно искать теги по парам? Иначе можно без циклов и рекурсии, если, конечно не считать replace c global циклом
var BB = new function () {
this.tags = {
U: "ins",
I: "em",
B: "strong",
S: "del"
}
function parseAttr(attr) {
// не реализовано
return "ATTR";
}
var BB = /(?:\[(\/)?\s*(?:((?:\\[\s\S]|[^\[\]\s\=\/])+)(?:\s*=\s*((?:(?:(?:"[^"]*")|(?:'[^']*'))|(?:\\[\s\S]|[^\[\]\s\/]))+))?)\s*\])/g;
this.toHtml = function (string) {
var self = this;
return string.replace(BB, function (m, closed, name, attr) {
name = name.toUpperCase();
return self.tags[name] ?
"<" + (closed || "") + self.tags[name] +
(attr ? " " + parseAttr(attr) : "") + ">" : m;
});
}
}();
var str = "[B]bold [B]bold [B = SOME]bold [I] ITALIC FONT[/I] foo[/B] bar [/B] zot [/B] zorg";
alert(BB.toHtml(str))
Извиняюсь если ерунду ляпнул, голова к вечеру квадратная