Любой хороший синтаксический анализатор BBCode?

В настоящее время я разбираю серверную часть bbcode, но я бы хотел показать предварительный просмотр так же, как этот сайт.

Если я обрабатываю сервер bbcode с помощью ajax, он немного отстает, поэтому я решил сделать это на стороне клиента, чтобы просто показать предварительный просмотр.

Вы, ребята, знаете какой-нибудь парсер bbcode, написанный на javascript?

Ответ 1

Я лично не использовал Javascript BBcode parsers, но два лучших результата Google (bbcodejs и этот пост в блоге) выглядит довольно слабым. Первый, по-видимому, поддерживает простое обнаружение и замену, и, похоже, у последнего есть встроенный BBcode, поэтому вам, вероятно, придется немного взломать его, если вы выберете это решение.

Ваши лучшие варианты, вероятно, сводят собственное решение (возможно, основываясь на одной из двух ссылок здесь), или просто используйте AJAX и двигайтесь дальше. Это, вероятно, лучший способ обеспечить точность предпросмотра, и в любом случае предварительный просмотр не обязательно должен выполняться в режиме реального времени на каждом нажатии клавиши; задержка до отправки запроса приемлема.

Ответ 2

Немного поздно, и на вопрос, безусловно, был дан ответ. Однако, если вы по-прежнему открыты для предложений и еще не потратили свое время на преобразование указанного парсера из С# в JavaScript, я написал парсер (первоначально на PHP), который я преобразовал самостоятельно [2] в JavaScript. Он доступен в bitbucket в соответствии с лицензией BSD с 3 предложениями. Парсер кажется достаточно быстрым, но я не делал никакого анализа его скорости.

В некоторых случаях это может быть не так гибко, как другие возможные проекты, но это позволяет определять ваши собственные коды ( "bb-code" или нет, с множеством свойств), а также все они содержатся в один файл. Это не простой синтаксический анализатор поиска и замены и не основан на регулярном выражении.

Если это вас интересует, это может избавить вас от необходимости конвертировать эту другую библиотеку. Технически, я относительный "неизвестный", но что отличные вещи о JS/OSS: вы можете проверить источник, чтобы увидеть, что я сделал.

[2] В результате есть несколько оставшихся "функций совместимости", но я переписал вещи, в которых есть собственные эквиваленты.

Ответ 3

Я столкнулся с той же проблемой, поэтому я написал свою. Это поддерживает BBCode → AST Array → любой вид разметки, теперь поддерживает HTML и React. И имеет поддержку плагинов и пресетов

https://github.com/JiLiZART/bbob