Требуется простая помощь в регулярных выражениях javascript - PullRequest
1 голос
/ 23 сентября 2011

У меня есть простое регулярное выражение:

\[quote\](.*?)\[\/quote\]

Что заменит [quote] на table, tr и td. (и [/ quote] / td, / tr и / table)

Отлично работает для нескольких отдельных кавычек в одной строке:

IE:

[quote]
Person 1
[/quote]
Person 3 talking about a quote

[quote]
Person 2
[/quote]
Person 3 talking about another quote.

НО при попытке заменить несколько (не разделенных) кавычек в одной строке:

IE:

[quote]
[quote]
Person 1
[/quote]
Person 2 quoting person 1
[/quote]
Person 3 quoting person 2 and 1

Это портит (соответствует первой цитате первой / цитате, когда она должна соответствовать второй цитате первой / цитате и первой цитате последней / цитате)

Как бы я отредактировал регулярное выражение, чтобы оно работало в обоих примерах?

Большое спасибо,

Джеймс

Ответы [ 3 ]

2 голосов
/ 23 сентября 2011

Regex не является хорошим выбором для анализа вложенного структурированного текста. См. этот вопрос для JavaScript BBCode parser

0 голосов
/ 24 сентября 2011

Я создал пример парсера JavaScript BBCode, который обрабатывает эту ситуацию. Я думаю, что справился с этой ситуацией, потому что функция замены строк в JavaScript может принимать другую функцию, так что вы можете заставить свой синтаксический анализатор рекурсивно работать с меньшими участками ввода. Однако прошло много времени с тех пор, как я на это смотрел. Вы можете увидеть его в действии здесь и загрузить его на той же странице (ссылка для скачивания находится под заголовком - «Вы можете скачать модуль JavaScript для этого здесь.»):

http://patorjk.com/bbcode-previewer/

0 голосов
/ 23 сентября 2011

Попробуйте это:

\[quote\]{1,}(.*?)\[\/quote\]
...