Пишу надстройку над CodeMirror для редактирования html-кода. Не очень силен в JavaScript, совсем не силен в регулярных выражениях.
Как мог бы выглядеть на JS следующий алгоритм –
Имеется текст в переменной s, например:
var s = " \t\t \t\t Принцип восприятия \t\t \t \t \t\t\t непредвзято создает паллиативный интеллект, условно. \t \n Концепция ментально оспособляет закон внешнего мира. Сомнение раскладывает на элементы неоднозначный структурализм. \n \n \n\nСмысл жизни профанирует принцип восприятия, отрицая очевидное. <p>Жизнь философски ассоциирует напряженный постмодернизм.</p> \n <p>\tОбъект деятельности означает конфликт. Согласно предыдущему, конфликт, в рамках сегодняшних воззрений, ясен не всем.</p> \n\nИсточник: http://www.artlebedev.ru/kovodstvo/sections/66/";
Нужно:
1. Заменить "</p>" и "<p>" на "\n"
2. Добавить в начало и конец "\n"
3. Заменить "\n" на "</p><p>"
4. Заменить все пробельные символы на пробел
5. Удалить все двойные пробелы
6. Заменить "</p> <p>" на "</p><p>"
7. Заменить " </p>" на "</p>"
8. Заменить "<p> " на "<p>"
9. Заменить все "</p><p></p><p>" на "</p><p>"
10. Удалить "</p>" в начале (если есть)
11. Удалить "<p>" в конце (если есть)
12. Заменить "</p>" на "</p>\n\n"
Есть альтернативный вариант:
1. Заменить "</p>" и "<p>" на "\n"
2. Заменить все пробельные символы за исключением "\n" на пробел
3. Удалить все двойные пробелы
4. Получить массив строк по разделителю "\n" исключая пустые (пробельные) строки
5. Объединить массив в строку используя соединитель "</p>\n\n<p>"
6. Добавить в начало "<p>" и в конец "</p>"
Не знаю, что на JS будет оптимальнее. На C# делал бы 2 вариант.
На выходе хочется получить вот это:
<p>Принцип восприятия непредвзято создает паллиативный интеллект, условно.</p>
<p>Концепция ментально оспособляет закон внешнего мира. Сомнение раскладывает на элементы неоднозначный структурализм.</p>
<p>Смысл жизни профанирует принцип восприятия, отрицая очевидное. Жизнь философски ассоциирует напряженный постмодернизм.</p>
<p>Объект деятельности означает конфликт. Согласно предыдущему, конфликт, в рамках сегодняшних воззрений, ясен не всем.</p>
<p>Источник: http://www.artlebedev.ru/kovodstvo/sections/66/</p>