Показать сообщение отдельно
  #1 (permalink)  
Старый 08.10.2013, 10:57
Аватар для mi.rafaylik
Кандидат Javascript-наук
Отправить личное сообщение для mi.rafaylik Посмотреть профиль Найти все сообщения от mi.rafaylik
 
Регистрация: 07.12.2012
Сообщений: 113

Как упростить цепь регулярных выражений
Прошу совета - стоит ли сокращать количество прохождений регулярок в тексте, или такая конструкция допустима?
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>&nbsp;&nbsp;</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(/&nbsp;/g, '') // удаляем неразрывные пробелы
		.replace(/<p><\/p>/g, '') // удаляем пустые параграфы
		.replace(/<\/p><p>/g, '</p>\r\n\r\n<p>') // добавляем переносы строк после параграфов для лучшей читаемости
	);
});

Сложность в том, что текст перебирается пять раз.
Можно было бы выполнить несколько однотипных действий сразу, например
.replace(/&nbsp;|<p><\/p>/g, '')

но результат не будет таким же, так как параграфы с неразрывными пробелами станут пустыми, но не удалятся, так как действия происходили паралельно а не постепенно.

Последний раз редактировалось mi.rafaylik, 08.10.2013 в 14:44.
Ответить с цитированием