Мне нужно убрать встроенные разрывы строк, но не разрывы абзацев, когда браузер не IE.
Причиной такой необходимости является удобное форматирование предупреждающих сообщений.Оказывается, что основные не-IE браузеры сами форматируют сообщения, вставляя переносы строк в удобном месте.Однако IE не будет этого делать.Таким образом, неформатированная строка просто увеличивает ширину окна предупреждения.Мое решение состоит в том, чтобы отформатировать все предупреждающие сообщения с помощью разрывов строк для IE и удалить разрывы строк, когда браузер не является IE.Это дает красиво отформатированное предупреждение независимо от браузера.Если эта дополнительная обработка не выполняется, то у вас либо уродливые широкие окна предупреждений в IE (без разрывов), либо разорванный форматированный текст в браузерах, отличных от IE, поскольку присутствуют жестко запрограммированные разрывы строк и добавленные браузером разрывы строк.
Еще одним осложнением является то, что я не хочу зачеркивать ВСЕ разрывы строк, поскольку это также удалит разрывы абзацев.Таким образом, последнее требование состоит в том, чтобы убрать все одиночные разрывы строк, но не разрывы «параграфа», которые представляют собой просто два последовательных разрывов строки.быть сбежавшимПоэтому вместо того, чтобы рассматривать разрывы строк как \ n, они \\ n, и регулярное выражение должно искать шаблон \\ n.
Также обратите внимание: большинство наших важных "всплывающих сообщений и диалогов"сделано с использованием jquery, чтобы обеспечить красиво отформатированный дисплейТаким образом, другой подход заключается в том, чтобы полностью покончить с оповещениями и заменить их диалогами jquery.Однако в этих случаях мы не хотим заходить так далеко, а просто хотим красиво отформатированное окно оповещения.
Обычно мы выполняем обработку регулярных выражений в PHP, которая прекрасно работает.Проблема в том, что я также хотел бы иметь эквивалентную обработку в чистом JavaScript, если это возможно.Я подозреваю, что обработка javascript может не поддерживаться в негативном формате, по крайней мере так же, как в PHP.Если так, то это поднимает сложность.До сих пор я не смог придумать версию javascript.
Вот код PHP, который достигает желаемого результата:
/**
* Removes embedded line breaks but not paragraph breaks if not IE
*
* @param string $message - formatted for IE, with embedded paragraph and line breaks
* $is_IE - set elsewhere to indicate if the browser is IE
*/
function FormatAlert($message)
{
global $is_IE;
return ($is_IE) ? $message : preg_replace('/(?<!\\\n)\\\n(?!\\\n)/', ' ', $message);
}
Таким образом, необходимо создать эквивалентное регулярное выражение дляjavascript.
В дальнейшем я подумал, что если я смогу найти одно регулярное выражение, то временным решением будет временная замена двойных разрывов строк, используемых для разрывов абзацев, специальным символом, а затем замена остальныходиночные разрывы строк, а затем, наконец, заменить специальный символ двойным разрывом строки.