С Новым годом! Форум программистов, компьютерный форум, киберфорум
JavaScript: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
14 / 9 / 12
Регистрация: 10.09.2012
Сообщений: 1,001
1

Реализация переноса строк в BB-кодах

18.02.2016, 09:14. Показов 778. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.Пытаюсь сделать предосмотр сообщений. Дошёл до момента парсинга bbcode to html.Нашёл скрипт всё работает, но не хватало пару содов.С простыми справился а вот на [code=php] застрял. Престаёт работать при переносе строк.Т.е. так работает (изменил название, а то паррсит)
[codes=php]str str[/codes]
[codes=php]str str[/codes]
а так нет
[codes=php]str
str[/codes]

Помогите поправить. Код
Кликните здесь для просмотра всего текста
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
var BBCodeHTML = function() {
  var me = this;            // stores the object instance
  var token_match = /{[A-Z_]+[0-9]*}/ig;
 
  var tokens = {
 
    'CODE' : '(.*?)'
 
  };
 
  var bbcode_matches = [];    
  var html_tpls = [];       
  var html_matches = [];       
  var bbcode_tpls = [];    
 
 
  var _getRegEx = function(str) {
    var matches = str.match(token_match);
    var nrmatches = matches.length;
    var i = 0;
    var replacement = '';
 
    if (nrmatches <= 0) {
      return new RegExp(preg_quote(str), 'g'); 
    }
 
    for(; i < nrmatches; i += 1) {
      var token = matches[i].replace(/[{}0-9]/g, '');
      if (tokens[token]) {
        replacement += preg_quote(str.substr(0, str.indexOf(matches[i]))) + tokens[token];
        str = str.substr(str.indexOf(matches[i]) + matches[i].length);
      }
    }
    replacement += preg_quote(str);  
    return new RegExp(replacement, 'gi');
  };
 
 
  var _getTpls = function(str) {
    var matches = str.match(token_match);
    var nrmatches = matches.length;
    var i = 0;
    var replacement = '';
    var positions = {};
    var next_position = 0;
 
    if (nrmatches <= 0) {
      return str;     
    }
 
    for(; i < nrmatches; i += 1) {
      // Remove {, } and numbers from the token so it can match the
      // keys in tokens
      var token = matches[i].replace(/[{}0-9]/g, '');
      var position;
 
      // figure out what $# to use ($1, $2)
      if (positions[matches[i]]) {
        position = positions[matches[i]];  
      } else {
        next_position += 1;
        position = next_position;
        positions[matches[i]] = position;
      }
 
      if (tokens[token]) {
        replacement += str.substr(0, str.indexOf(matches[i])) + '$' + position;
        str = str.substr(str.indexOf(matches[i]) + matches[i].length);
      }
    }
 
    replacement += str;
 
    return replacement;
  };
 
 
  me.addBBCode = function(bbcode_match, bbcode_tpl) {
    bbcode_matches.push(_getRegEx(bbcode_match));
    html_tpls.push(_getTpls(bbcode_tpl));
  };
 
 
  me.bbcodeToHtml = function(str) {
    var nrbbcmatches = bbcode_matches.length;
    var i = 0;
 
    for(; i < nrbbcmatches; i += 1) {
      str = str.replace(bbcode_matches[i], html_tpls[i]);
    }
 
    return str;
  };
 
  me.htmlToBBCode = function(str) {
    var nrhtmlmatches = html_matches.length;
    var i = 0;
 
    for(; i < nrhtmlmatches; i += 1) {
      str = str.replace(html_matches[i], bbcode_tpls[i]);
    }
    return str;
  }
  
  function preg_quote (str, delimiter) {
    return (str + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
  }
 
   me.addBBCode('[code=php]{CODE}[/code]', '<pre><code class="php">{CODE}</code></pre>');
};
var bbcodeParser = new BBCodeHTML();       // creates object instance of BBCodeHTML()
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2016, 09:14
Ответы с готовыми решениями:

Реализация переноса
Всем привет! Тут такая задачка. Надо нарисовать параллелепипед, и чтобы при нажатии например кнопки...

shared_ptr и реализация семантики переноса
Написал небольшой класс Array основанный на std::shared_ptr. Но как то не совсем уверен в...

Реализация переноса данных из таблицы Excel в checkedListBox
Здравствуйте! Подскажите, пожалуйста, как реализовать перенос значений ячеек из книги Excel в...

Реализация переноса данных из таблицы Excel в checkedListBox
Здравствуйте! Подскажите, пожалуйста, как реализовать перенос значений ячеек из листа Excel(.xlsx)...

0
18.02.2016, 09:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2016, 09:14
Помогаю со студенческими работами здесь

Удаление переноса строк
Есть строка QString. Если я ее вывожу в окне, то видно, что кроме текста там есть куча переносов...

Макрос для переноса строк
Доброго времени суток! Необходим макрос для MS Word 2007-10 для перевода текста из состояния...

Замена переноса строк(не \n символ) на br
Имеется &lt;textarea&gt;, туда чел вводит свой текст, естественно с переводами строк(просто нажимает...

Запрет переноса строк в таблице
Здравствуйте. Как запретить перенос строк при изменение размеров, что бы добавлялось многоточие ?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru