Как осуществить чистку текста на JavaScript?

Пишу надстройку над 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>
  • Вопрос задан
  • 2672 просмотра
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
s1 = "<p>"+s.replace(/<\/?p>/gi, "\n").replace(/[ \t\r]+/g, " ").replace(/\s*\n\s*/g, "</p>\n\n<p>").trim(" ")+"</p>";
Ответ написан
Комментировать
Zarinov
@Zarinov Автор вопроса
Рабочий вариант, но добавляет параграфы в начале и конце.
Более корректный вариант дал рони с javascript.ru.
В итоге звучит так:
var s = "   \t\t   \t\t  Принцип восприятия   \t\t  \t \t   \t\t\t непредвзято создает паллиативный интеллект, условно.  \t   \n Концепция ментально оспособляет закон внешнего мира. Сомнение раскладывает на элементы неоднозначный структурализм. \n \n \n\nСмысл жизни профанирует принцип восприятия, отрицая очевидное. <p>Жизнь философски ассоциирует напряженный постмодернизм.</p>   <p> Объект деятельности означает конфликт. Согласно предыдущему, конфликт, в рамках сегодняшних воззрений, ясен не всем.</p> \n\nИсточник: http://www.artlebedev.ru/kovodstvo/sections/66/";
    s = s.replace(/<\/?p>/g, '\n')
   .replace(/^\s+|\s+$/g,'')
   .replace(/[\t ]+/g, ' ')
   .replace(/\s*\n\s*/g, '<\/p>\n\n<p>');
   s = '<p>'+s+'</p>';
   alert(s);
    s = s.replace(/<\/?p>/g, '\n')
   .replace(/^\s+|\s+$/g,'')
   .replace(/[\t ]+/g, ' ')
   .replace(/\s*\n\s*/g, '<\/p>\n\n<p>');
   s = '<p>'+s+'</p>';
   alert(s);


Спасибо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Zarinov
@Zarinov Автор вопроса
Нужен валидный XHTML
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы