Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с BB тегами через JS

477
25 августа 2007 года
Robinnovich
182 / / 02.12.2006
Вопрос такой как на JS с помощью регулярных выражений преобразовать такой тег [color=#FAFAFA]color[ /color] в <font color=#FAFAFA>color</font>
И еще иногда возникает проблема когда какой-то BB тег не был закрыт например тег
Пример текста:
 
Код:
Эта   версия CanoScan Toolbox работает в системах Windows 98,
Windows 2000 Professional, Windows Me, Windows XP Home Edition
и Windows XP Professional.

Как пропарсить строку чтобы нашло каждый открывающийся тег и который не закрывается и автоматом доставило в конец с учетом их открытия.
Правленым вариантом предложения будет такой текст:
 
Код:
Эта   версия CanoScan Toolbox работает в системах Windows 98,
Windows 2000 Professional, Windows Me, Windows XP Home Edition
и Windows XP Professional.[ /b][ /s]

а не:
 
Код:
Эта   версия CanoScan Toolbox работает в системах Windows 98,
Windows 2000 Professional, Windows Me, Windows XP Home Edition
и Windows XP Professional. [ /s] [ /b]
18K
25 августа 2007 года
gnumus
52 / / 28.07.2007
А в чём, собственно проблема? В яваскрипте есть средства для работы с регулярными выражениями.
А алгоритмы - они в любом языке алгоритмы. Например тот-же алгоритм стека...
15K
26 августа 2007 года
gruz0
71 / / 23.11.2006
Держи, может мой код тебе будет полезен:
Код:
function bb2html(message) {
    // message = message.replace(/[ ]{2,}/," ");
    /* "'<script[^>]*?>.*?</script>'si","'<[\/\!]*?[^<>]*?>'si","'([\r\n])[\s]+'","'&(quot|#34);'i","'&(amp|#38);'i","'&(lt|#60);'i","'&(gt|#62);'i","'&(nbsp|#160);'i","'&(iexcl|#161);'i","'&(cent|#162);'i","'&(pound|#163);'i","'&(copy|#169);'i","'&#(\d+);'e"*/

    message = message.replace(/<(.*)>(.*)<\/(.*)>/gi,"$2");
    message = message.replace(/\[([\w]+)\]\[\/([\w]+)\]/g,"");     
    message = message.replace(/(<)(.*)(>)/,"&lt;$2&gt;");

    message = message.replace(/[\n]/gi,"<br />");
   
    message = message.replace(/\[p\](.*?)\[\/p\]/g,"<p class='item'>$1</p>");
    message = message.replace(/\[b\](.*?)\[\/b\]/g,"<b>$1</b>");
    message = message.replace(/\[i\](.*?)\[\/i\]/g,"<i>$1</i>");
    message = message.replace(/\[u\](.*?)\[\/u\]/g,"<u>$1</u>");
    message = message.replace(/\[align=([\w]+)\](.*?)\[\/align\]/g,"<div align='$1'>$2</div>");
    message = message.replace(/\[color=([\#a-z0-9]*?)\](.*?)\[\/color\]/g,"<font style=\"color:$1;\">$2</font>");
    message = message.replace(/\[bgcolor=([\#a-z0-9]*?)\](.*?)\[\/bgcolor\]/g,"<font style=\"background-color:$1;\">$2</font>");
    message = message.replace(/\[size=([0-9]+)\](.*?)\[\/size\]/g,"<font style=\"font-size:$1pt;\">$2</font>");
    message = message.replace(/\[font=([a-z\-\ ]*?)\](.*?)\[\/font\]/g,"<font style=\"font-family:$1;\"'>$2</font>");
   
    message = message.replace(/\[acr=(\"(.+)\")\]([a-zа-я0-9]+)\[\/acr\]/gi,"<acronym title=\"$2\" lang=\"ru\">$3</acronym>");
    //message = message.replace(/\[acr=([a-zа-я0-9\ ]*?)\]([a-zа-я0-9]+)\[\/acr\]/g,"<acronym title=\"\" lang=\"ru\">$2</acronym>");
   
    message = message.replace(/\[list(=([\w]+)?)?\](.*?)\[\/list\]/gim,"<ul class='$2'>$3</ul>");
    message = message.replace(/\[\*\](.*?)/gim,"<li>$1");
   
    message = message.replace(/\[url=(.*?)\](.*?)\[\/url\]/g,"<a href='$1' target='blank'>$2</a>");
    message = message.replace(/\[mail=(.*?)\](.*?)\[\/mail\]/g,"<a href='mailto:$1'>$2</a>");
    message = message.replace(/\[img=(.*?)(\ ?)(float=([a-z]+))(\ ?)(size=(([0-9]+),([0-9]+)))?(\ ?)(border=([0-9]+)?)?\]/g,"<img src='../upload/images/$1' style='border:$12px solid #000;float:$4;width:$8px;height:$9px;'>");

    message = message.replace(/\[file=([0-9]+)\]/g,"<a href='#'>Скачать файл</a>");
    return (message);
}


На стили в тегах внимания не обращай - лень было наводить красоту.

Удачи!
15K
26 августа 2007 года
gruz0
71 / / 23.11.2006
По второму вопросу думать не буду :) Опять, та же лень ))
477
27 августа 2007 года
Robinnovich
182 / / 02.12.2006
спасибо )) по второму вопросу можно реализовать и на пхп все равно
12
27 августа 2007 года
alekciy
3.0K / / 13.12.2005
Хм.... смысл это делать на клиенте, если все равно на сервере потом эти данные проверять? Хотя подозреваю для чего.

Или быть может после такого преобразования ты данные с клиента не проверяешь и пишешь сразу в БД?
244
27 августа 2007 года
UAS
2.0K / / 19.07.2006
alekciy, ну может это для того, чтобы сразу предварительный просмотр делаллся.. Средствами JS. Я б тоже такое сделал, да лень=)
15
27 августа 2007 года
shaelf
2.7K / / 04.05.2005
Да возьмите кусок с любого (почти))) форума и посмотрите, или (что ещё лучше) воткните его к себе, если работоспособность его полностью всех устраивает.
15K
05 сентября 2007 года
gruz0
71 / / 23.11.2006
Цитата: UAS
alekciy, ну может это для того, чтобы сразу предварительный просмотр делаллся.. Средствами JS. Я б тоже такое сделал, да лень=)



Реализовал подобную "фичу" для последнего заказчика, вышло замечательно.
Если кому интересно, могу выложить php + js код (в личку).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог