Преобразование новых строк в HTML-теги абзаца / br. Может ли это быть одним регулярным выражением? - PullRequest
8 голосов
/ 20 декабря 2011

В приложении, над которым я работаю, пользователь вводит контент в виде открытого текста, который впоследствии будет отображаться в формате HTML. Чтобы пользовательский контент отображался как можно лучше, мы трансформируем контент следующим образом:

  • Любые блоки текста, разделенные двумя или более символами новой строки, заключаются в теги

    . Символы новой строки (и любые пробелы между ними) удаляются.

  • Любые символы новой строки (вместе с окружающими пробелами) заменяются тегом
    .

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

// content holds the text to process
content = '<p>' + content.replace(/\n([ \t]*\n)+/g, '</p><p>')
                 .replace(/\n/g, '<br />') + '</p>';

Ответы [ 2 ]

10 голосов
/ 20 декабря 2011

Есть две разные строки замены. Так что это невозможно сделать за один раз.

Но второй метод replace () можно изменить на более эффективную подстановку простой строки.

content = '<p>' + content.replace(/\n([ \t]*\n)+/g, '</p><p>')
                 .replace('\n', '<br />') + '</p>';

Итак, есть одно регулярное выражение. :)

Обновление

Javascript обманул меня. Строка replace обрабатывает только первое вхождение.

См. Как заменить все вхождения строки в JavaScript?

Также даны несколько возможных решений для обхода replaceAll.

3 голосов
/ 13 ноября 2013

Я столкнулся с аналогичным требованием - имитировать функциональность wpautop в javascript (для использования в настройщике тем).

Итак, вот мой подход к проблеме:

Сначала заменитеслучай, когда есть два разрыва строки.

to = to.replace(/\n{2}/g, '&nbsp;</p><p>');

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

to = to.replace(/\n/g, '&nbsp;<br />');

И, наконец, оберните весь контент в

tag

to = '<p>' + to + '</p>';

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...