Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Заменить переносы строк абзацами / 18 сообщений из 18, страница 1 из 1
02.08.2013, 20:47
    #38353578
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
Не удалось найти готовую функцию сходу. nl2br на яве есть, конечно, но одно дело подставить br в одно место, другое парочку p /p сразу в два.

Пишут что абзац можно не закрывать если ... и перечисляется довольно обширный список.

http://www.w3.org/TR/html-markup/p.html

Однако, поскольку это, все-таки текст, то лучше бы закрывать. В общем может есть у кого готовое.

Пока что сделал тупо

Код: sql
1.
return (str + '').replace(/\r/g, '').replace(/\n/g, '<p>');



\r - отвинды, глобально выкидывается в //dev/null, \n заменяется на p, тоже глобально.

Я вообще в паттернах крайне слаб, а чтобы придумать еще и парный паттерн - это для меня фантастика.

Насчет nl2br и вообще br. В типографике эквивалент br - мягкий перенос. С какого перепуга весь интернет повелся переносить строки только по одному нажатию Enter - я могу объяснить только тем обстоятельством, что интернет начинали программисты. Которые задолго до того писали текстовые редакторы для написания программ в редакторах которые сами и написали.

В результате теперь чтобы сделать абзац надо два раза перематывать лист и переносить каретку. :)
...
Рейтинг: 0 / 0
02.08.2013, 20:54
    #38353582
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
br, наверняка берет свое начало в консолях, которые были задолго до веба.

В программах которые работают на принтер нажатием Ентер строку перенести нельзя. Кто хоть раз набирал текст в Ворде знает об этом, но не замечает может быть разницы с программами которые работают на экран. Ентер, или CRLF в типографских прогах генерит абзац, или paragraph - тот самый p. Перенести строку вручную, принудительно то есть, можно специальной комбинацией, как правило это Shift+Enter (Alt+Enter в екзеле).
...
Рейтинг: 0 / 0
02.08.2013, 20:55
    #38353585
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
Да, и код у мягкого переноса другой и почему-то в разных программах - разный.
...
Рейтинг: 0 / 0
02.08.2013, 21:16
    #38353603
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
deblogger,

я правильно понимаю, что текст "123\n456\n789" надо заменить на "<p>123</p><p>456</p><p>789</p>" ?

Если да, то вроде всё просто:
Код: javascript
1.
return '<p>' + (str + '').replace(/\r?\n/g, '</p><p>') + '</p>';
...
Рейтинг: 0 / 0
02.08.2013, 21:41
    #38353619
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
Яростный Меч,

Не допер. Спасибо.

Что значит паттерн "r?" - это оно самое - выкинуть все \r прежде чем менять \n
...
Рейтинг: 0 / 0
02.08.2013, 21:45
    #38353621
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
debloggerЧто значит паттерн "r?" - это оно самое - выкинуть все \r прежде чем менять \nэтот регекс будет искать все "\n". Если перед "\n" окажется "\r" (виндовый случай "\r\n"), то он при замене уйдет вместе со своим "\n".
...
Рейтинг: 0 / 0
02.08.2013, 21:47
    #38353622
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
Нет, допер. Так нельзя. Безусловно подставлять абзацы нельзя. Потому что любой текст оказывается абзацем.

<p>4</p>,<p>1</p>,<p>1</p><p>2</p><p>3</p><p>4</p>,

4, 1, 1 - это вообще ID полей. :)
...
Рейтинг: 0 / 0
02.08.2013, 21:51
    #38353625
Яростный Меч
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
deblogger,

ну давай несколько примеров входных данных и для каждого из них правильный результат
...
Рейтинг: 0 / 0
02.08.2013, 21:54
    #38353626
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
В целом задача тривиальная и много раз решеная но в прошлом я был единственным клиентом своих апликух, а теперь работа на публику требует дополнительных опций.

Задача обычная. Я собираю текст из колонок в таблице который был подвергнут редактированию, проверяю, вот эти переносы \n заменяю на хтмл ентитьки и потом делю колонки \t, а строки \n. Простая и типичная схема - так все таблицы в буфер копируются грамотными апликухами. Затем все барахло пихается в value нажатой кнопки и поехали на сервер. Там я разберу строки по переносу и столбцы по табуляторам, которые тоже надо проверить и, или выкинуть или заменить на соответствующее количество пробелов.
...
Рейтинг: 0 / 0
02.08.2013, 21:57
    #38353627
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
deblogger,

Ну какие там примеры. Идет сбор с полей, всякие разные данные. Цифры, текст, енум, даты и тп. Тотально все, конечно, текст, тип подразумевается и только рендерится. Есть и текстареа где можно переносить строки. Ну вот, получается 1, 4, 5, 1\r\n2\r\n3\r\n и так далее если ввести
1
2
3

А надо так, чтобы если нет переноса в строке - то и ничего с ней, а если есть, то заменить на абзацы. Стало быть нечетный на p, четный на /p
...
Рейтинг: 0 / 0
02.08.2013, 22:04
    #38353630
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
Пока что можно и с одним р, там контекст позволяет. Никаких сложных структур. Скажем статейка с фотками. Упрутся абзацы, наверняка.

Вопрос пока такой. Эта рега

Код: sql
1.
return (str + '').replace(/\r?\n/g, '<br/>');



Точно все виндовые \r снесет и \n не оставит и в винде и на линухе?

Кстати, в оригинальном нл2бр вообще какая-то жуть. Работает, но так, чтобы и вашим и нашим. И бр ставит и переносы оставляет.

Код: sql
1.
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '<br/>');
...
Рейтинг: 0 / 0
02.08.2013, 22:42
    #38353639
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
debloggerdeblogger,

Ну какие там примеры. Идет сбор с полей, всякие разные данные. Цифры, текст, енум, даты и тп. Тотально все, конечно, текст, тип подразумевается и только рендерится. Есть и текстареа где можно переносить строки. Ну вот, получается 1, 4, 5, 1\r\n2\r\n3\r\n и так далее если ввести
1
2
3

А надо так, чтобы если нет переноса в строке - то и ничего с ней, а если есть, то заменить на абзацы. Стало быть нечетный на p, четный на /p

я правильно понял, "1, 4, 5, 1\r\n2\r\n3\r\n" - это 4 разные строки (то есть "1", "4", "5" и "1\r\n2\r\n3\r\n")? Если нет, и Вы их в одну сложили, то добавили себе проблем, так как Вы никак не отделите эти значения от строки (ведь в строке тоже запятые могут присутствовать).

А по поводу "А надо так, чтобы если нет переноса в строке - то и ничего с ней" - ну так есть функция match у строк :) сбахайте проверку на наличие переноса (хотя бы одного), и если он есть - тогда проводите замену, как уже предложили ранее :).
...
Рейтинг: 0 / 0
02.08.2013, 23:13
    #38353653
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
Програмёр,

Запятые это не разделители. Это текст. Разделитель столбцов табулятор, разделитель строк перенос строк.
...
Рейтинг: 0 / 0
02.08.2013, 23:17
    #38353658
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
debloggerПрограмёр,

Запятые это не разделители. Это текст. Разделитель столбцов табулятор, разделитель строк перенос строк.

ок, тогда всё-таки... есть данные: 1\t1, 4, 5, 1\r\n2\r\n3\r\n\t3\t4
Во что они должны превратиться?
...
Рейтинг: 0 / 0
03.08.2013, 08:14
    #38353770
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
Двойной \r\n должен превратиться в </p><p> а одиночный в <br> ?
...
Рейтинг: 0 / 0
03.08.2013, 12:26
    #38353863
asws
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
deblogger... делю колонки \t, а строки \n...Не советую так делать, сами видите сколько проблем.
А если надо будет вставить содержимое textarea, где \n - это нужный символ?
Возьмите редкий символ из кодировки utf-8, и применяйте его для переноса строк, или двойную табуляцию, или другие способы.
Вариантов - море.
...
Рейтинг: 0 / 0
06.08.2013, 06:58
    #38355982
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
Я уже сделал. В тексте не может быть символа \n по определению.

Такой символ не имеет никакого значения для рендера веб-страницы, он влияет только на отображение исходного кода, на читабельность его.

Вы же знаете что
если написать
вот
так
в исходнике хтмл, то на странице
все будет ровно в одну строку.

Подумал может вы последовательность с символом перепутали. Последовательность разрешена, хоть стопицот раз \n\n\n впишите куда угодно.
...
Рейтинг: 0 / 0
06.08.2013, 06:59
    #38355984
deblogger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить переносы строк абзацами
Короче забил я на закрывашки и точка.

Код: javascript
1.
2.
3.
function nl2ptab (str, rep = '<p>') {
	return (str + '').replace(/\r\n|\n\r|\r|\n/g, rep).replace(/\t/g, '');
}
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Заменить переносы строк абзацами / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]