Вот такой парсер ....
//url parser
function urlify(text) {
var urlRegex =/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(urlRegex, function(url) {
return '<a href="' + url + '">' + url + '</a>';
});
}
value=urlify(value);
//------url
//смайлы
for (var key in Smileys) {
value=value.split(key).join(Smileys[key]);
}
//цитаты
var idx=value.indexOf('[qu ote'),
end=value.substring(idx).indexOf(']')+1;
while(idx>-1){
var header=value.substring(idx,idx+end),
avtor='',wr_date='',dd,old_date;
if(header.indexOf('author=')>-1){
if(header.indexOf('link=')>-1){
avtor='<font size=0.7em>'+header.substring(header.indexOf('author=')+7,header.indexOf('link='));
} else {
avtor='<font size=0.7em>'+header.substring(header.indexOf('author=')+7,header.indexOf(']'));
}
}
if(header.indexOf('date=')>-1){
dd=Number(header.substring(header.indexOf('date=')+5,header.indexOf(']')),10);
old_date=new Date(dd* 1000);
wr_date=' '+old_date.toLocaleString("ru", RuLocalOptions)+'</font>';
}
value=value.split(value.substring(idx,idx+end)).join('<di v style="padding:5px;padding-left:20px;margin-left:6px;background: url(img/quote.png) 0.1em 0.1em no-repeat; background-color:rgba(54, 54, 200, 0.1);border-radius: 6px;display: block;">'+
avtor+wr_date+'</b r>');
idx=value.indexOf('[qu ote');
end=-1;
if(idx>-1)end=value.substring(idx).indexOf(']')+1;
}
value=value.split('[/qu ote]').join('</div>') ;
//цитаты-------
//date
var d=new Date(),dd='';
if(Ext.Date.format(record.get('DATA_MES'),'Y-m-d')==Ext.Date.format(d,'Y-m-d')) dd='<font color=black><b>Сегодня</b></font>';
else{
d.setDate(d.getDate() - 1);
if(Ext.Date.format(record.get('DATA_MES'),'Y-m-d')==Ext.Date.format(d,'Y-m-d')) dd='<font color=black><b>Вчера</b></font>';
}
var headLine;
if(record.get('DATA_MES'))
headLine='<div style="text-align: left;height:20px;width:100%;font-size: 0.8em;">'+
(dd?dd:record.get('DATA_MES').toLocaleString("ru", RuLocalOptions))+
'</div>';
//date-----
//[b ] [ /b]
value=value.split('[/ b]').join('</ b>');
value=value.split('[ b]').join('<b >');
//------
//[co de] [/co de]
value=value.split('[/c ode]').join('</div>');
var cod='<div style="text-align: left;background-color:rgba(200, 54, 54, 0.1);width:80%;display: block;font-size: 0.7em;">Код:</div>';
cd=cod+'<div onclick="window.getSelection().selectAllChildren(this)"; style="text-align: left;padding:5px;min-height:50px;;max-height:300px;width:80%;overflow: auto;'+
'font-size: 1.1em;background-color:rgba(200, 54, 54, 0.05);display: block;">';
value=value.split('[co de]').join(cd);
//code----------
//pic
var pic=record.get('ATT_PIC')?record.get('ATT_PIC'):'';
//files
var fil=record.get('ATT_FILE')?record.get('ATT_FILE'):'';
idx=value.indexOf('[size');
end=value.substring(idx).indexOf(']')+1;
while(idx>-1){
value=value.split(value.substring(idx,idx+end)).join('<font size=4em>');
idx=value.indexOf('[size');
end=-1;
if(idx>-1)end=value.substring(idx).indexOf(']')+1;
}
value=value.split('[/size]').join('</font>') ;
//----
idx=value.indexOf('[color');
end=value.substring(idx).indexOf(']')+1;
while(idx>-1){
var col='black',
header=value.substring(idx,idx+end);
col=header.substring(header.indexOf('color=')+6,header.indexOf(']'));
value=value.split(value.substring(idx,idx+end)).join('<font color='+col+'>');
idx=value.indexOf('[color');
end=-1;
if(idx>-1)end=value.substring(idx).indexOf(']')+1;
}
value=value.split('[/color]').join('</font>') ;
//----
return '<div style="padding:6px; background-color:#e7eaef; border-radius:6px; display:block;">'+
headLine+value+pic+fil+
'</div>';