Разбор вики-разметки в Javascript с использованием регулярных выражений - PullRequest
1 голос
/ 30 января 2010

Я пытаюсь разобрать некоторую разметку в вики-стиле, используя анализатор разметки Wiki-разметки Javascript . Я пытаюсь расширить синтаксический анализатор для анализа тегов div следующим образом:

Разметка: << any_content_here << <br> HTML: <div class="left">content</div>

Разметка: >> any_content_here >>
HTML: <div class="right">content</div>

Разметка: ^^ any_content_here ^^
HTML: <div class="horz">content</div>

Синтаксический анализатор использует регулярные выражения для разбора разметки, но регулярное выражение определенно не является моей сильной стороной, и, поскольку у файла js практически нет комментариев, я считаю его особенно трудным для редактирования. Я написал в блоге парня с просьбой помочь с этим, но так как посту около 2 лет, я не ожидаю ответа в ближайшее время ...

Любая помощь с настройкой этого, или если кто-то может указать на парсер javascript, который уже поддерживает div, был бы очень признателен.

1 Ответ

1 голос
/ 30 января 2010

Если вы не заботитесь о вложении, вам даже не нужно регулярное выражение. Просто замените "<<" на "<div class='left'>" и т. Д.

Чтобы разрешить вложение, вам придется (1) изменить разметку, чтобы конец отличался от начала (например, <L> content </L>), и (2) выполнить регулярное выражение столько раз, сколько уровней , Регулярное выражение (для левого div) будет:

<L>(((?!</?L>).)*)</L>

И строка замены:

<div class="left">$1</div>

Вот функция, которая позаботится о разборе всех уровней:

function parseLeft(markup) {
  var regex = /<L>(((?!<\/?L>).)*)<\/L>/g;
  out = markup.replace(regex, '<div class="left">$1</div>');
  if (out.length == markup.length) {
    return out;
  } else {
    return parseLeft(out);
  }
}

Пример в действии:

> parseLeft('<L> Outer div <L>inner div</L>outer again </L>');
<div class="left"> Outer div <div class="left">inner div</div>outer again </div>
...