Как упростить цепь регулярных выражений
Прошу совета - стоит ли сокращать количество прохождений регулярок в тексте, или такая конструкция допустима?
P.S. 1: Операции выполняются с помощью jQuery, но думаю тема регулярных выражений в этом разделе будет актуальней. P.S. 2: Данная функция замены выполняется только в том случае, когда нужно скопировать содержимое div в textarea, для просмотра и точной коррекции. <div id='test' contenteditable="true"><p>Paragraph 1</p><p>Paragraph 2</p><p></p><div>Div</div><div> </div></div> <teatarea id='correction'></textarea> <div id='copy'></div> $('#copy').click(function(){ $('#correction').val($('#test').html() .replace(/<div>/g, '<p>') // заменяем блоки на параграфы .replace(/<\/div>/g, '</p>') .replace(/ /g, '') // удаляем неразрывные пробелы .replace(/<p><\/p>/g, '') // удаляем пустые параграфы .replace(/<\/p><p>/g, '</p>\r\n\r\n<p>') // добавляем переносы строк после параграфов для лучшей читаемости ); }); Сложность в том, что текст перебирается пять раз. Можно было бы выполнить несколько однотипных действий сразу, например .replace(/ |<p><\/p>/g, '') но результат не будет таким же, так как параграфы с неразрывными пробелами станут пустыми, но не удалятся, так как действия происходили паралельно а не постепенно. |
Цитата:
|
Цитата:
А если ты не считаеть написанное выше ерундой - то лучше вообще не занимайся программированием :) |
Предложу такой вариант...
var re = /( )|(<div>( )*<\/div>)|(<p>( )*<\/p>)/g; var str = "<div id='test'><p>Paragraph 1</p><p>Paragraph 2</p><p></p><div>Div</div><div> </div></div>"; alert(str.replace(re, '')); P.S. Но ерундой таки лучше не заниматься. :yes: |
Цитата:
|
ksa, danik.js, естественно, что для вида на странице используется CSS, я неправильно объяснил )
Функция замены происходит только в том случае, когда нужно скопировать содержимое div в textarea, для просмотра и точной коррекции, и только для этого, это опциональное действие. Цитата:
Переписал пример в первом сообщении, чтоб понятней было. |
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Deff, спасибо.
$('p:empty').remove() это конечно jQuery-way, но разве регулярное выражение не быстрей обработает? |
Цитата:
Потом - уже созданный объект парситься быстрее регулярки, так что еще бабушка надвое сказала, поскольку при возврате регуляркой на страницу innerHTML, - повторное создание объектов и их рендринг могут занять больше времени |
Deff,
Спасибо за развёрнутый ответ, прояснили |
Часовой пояс GMT +3, время: 04:02. |