Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярные выражения для превью форума (https://javascript.ru/forum/misc/2111-regulyarnye-vyrazheniya-dlya-prevyu-foruma.html)

Бобр 03.11.2008 07:39

Регулярные выражения для превью форума
 
Регулярные выражения для превью форума

То есть, чтобы превью была на Javascript'ах.

Человек вводить свой текст в < textarea > Бла бля бля < /textarea >, используя метатегия [ b ], [ /b ], [ i ], [ /i ], [ u ], [ /u ], [ quote='Имя авторая сообщения' ], [ /quote ], нажимает на кнопку превью, и ему отображается его текст, но уже в котором метатеги преобразованы в нормальные теги. То есть [ b ] в < /b > и так далее.

Но для такого преобразования нужны регулярные выражения. Можно их примеров? Потому, что наверняка уже полно готовых, и не хочется изобретать велосипед.

Gvozd 03.11.2008 08:07

написание такого регулярного выражения, в простейшем случае не есть "изобретать велосипед", а всего лишь легонькая тренировочка для тех, кто только начал изучать регулярные выражения.
на ПХП, я бы написал в две секунды, а вот в JS c регулярками я редко сталкиваюсь, поэтому не помню названий методов объекта.
прочитайте мануал по регуляркам
избретать велосипед, я вас не заставляю, но вот крутить за вас педали, уж извините, не буду.
ЗЫ поосторожней только с такими преобразованиям)))
бо мой воспаленный мозг уже видит несколько возможных путей XSS, при плохо сделанной автозамене, в зависимости от остального движка))))

Бобр 04.11.2008 06:25

Цитата:

Сообщение от Gvozd (Сообщение 8060)
написание такого регулярного выражения, в простейшем случае не есть "изобретать велосипед", а всего лишь легонькая тренировочка для тех, кто только начал изучать регулярные выражения.
на ПХП, я бы написал в две секунды, а вот в JS c регулярками я редко сталкиваюсь, поэтому не помню названий методов объекта.
прочитайте мануал по регуляркам

Я думал, что на сайте с таким названием сидят профессионалы в Javascript, которым написать два полезных многим выражения не составит труда. А не те, кто на все вопросы раздают бесполезные советы в стиле "погугли".

Поэтому собственно и зарегистрировался.

Бобр 04.11.2008 07:11

Если кто-то также как и я забрёл на этот бесполезный форум, то вот выражения для замены всех "[ b ]" на < b > и "[ / b ]" на < / b >.

s1 = s1.replace(/\[b\]/g, "<b>");
s1 = s1.replace(/\[\/b\]/g, '</b>');

По аналогии разберётесь с "i" и "u".
Каким выражением преобразовать [ quote = 'Имя пользователя' ] во что-нибудь типа '< table Border=1>< tr>< td>< b>Имя пользователя< /b>' - так и не нашёл.

Kolyaj 04.11.2008 08:44

Цитата:

Сообщение от Бобр
s1 = s1.replace(/\[b\]/g, "<b>");
s1 = s1.replace(/\[\/b\]/g, '</b>');

А зачем тут вообще регулярные выражения?

Цитата:

Сообщение от Бобр
на этот бесполезный форум

Пожалуй, не буду ломать ваши убеждения. :)

Gvozd 04.11.2008 13:16

Цитата:

Сообщение от Бобр
бесполезные советы в стиле "погугли".

ну, во первых я вам такого совета не давал.
я вам дал совет из класса RTFM, а это несколько другой класс советов.
вам реально стоит занятся изучением самых основ.

Андрей Параничев 04.11.2008 16:10

Бобр,
Почему вы думаете, что на каждую задачу существует готовое решение?
Вам посоветовали почитать материала на эту тему, потому что гораздо проще самому разобраться и решить задачу, чем ждать пока её кто-то решит за вас.

Цитата:

Сообщение от Бобр
Каким выражением преобразовать [ quote = 'Имя пользователя' ] во что-нибудь типа '< table Border=1>< tr>< td>< b>Имя пользователя< /b>'

Очень простое решение:
var s = "[quote=Кто-то]Цитата[/quote]";
alert(s.replace(/\[quote=(\S+)\](.+)\[\/quote\]/gi, "<table Border=1><tr><td><b>$1</b></td></tr><tr><td>$2</td></tr></table>"));

Но для вложенных друг в друга цитат придётся делать алгоритм с циклом, как я понимаю, я не решал такой задачи пока что.

Kolyaj 04.11.2008 20:03

/\[quote=(\S+)\](.+)\[\/quote\]/gi

1. Имя не обязательно не должно содержать пробелов (хотя кому я говорю :) )
2. Если в строке будет несколько цитат, то начало цитаты возьмется от первой, а конец -- от последней (жадный квантификатор +)

Андрей Параничев 05.11.2008 14:50

Kolyaj,
Ну я привел скорее для примера "в какую сторону копать".

Бобр 06.11.2008 09:12

Цитата:

Сообщение от Kolyaj (Сообщение 8075)
Пожалуй, не буду ломать ваши убеждения. :)

Факты, а не убеждения.


Цитата:

Сообщение от Андрей Параничев (Сообщение 8095)
Бобр,
Почему вы думаете, что на каждую задачу существует готовое решение?

Потому, что стандартная.


Цитата:

Сообщение от Андрей Параничев (Сообщение 8095)
Очень простое решение:
...
Но для вложенных друг в друга цитат придётся делать алгоритм с циклом, как я понимаю, я не решал такой задачи пока что.

Спасибо. :) Я уже сам сделал. С вложенными цитатами. Вот, если надо:

// [quote="Имя автора"] -> <table><tr><td><b>Имя автора</b>
    s1 = s1.replace(/\[quote="([^"]+)"]/g, '<table Border=1 bordercolorlight=white CellPadding=8 CellSpacing=0><tr><td><b>$1</b><br>');
      // [/quote] -> </td></tr></table>
    s1 = s1.replace(/\[\/quote\]/g, '</td></tr></table>');


Часовой пояс GMT +3, время: 12:24.