powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Заменить переносы строк абзацами
18 сообщений из 18, страница 1 из 1
Заменить переносы строк абзацами
    #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
Заменить переносы строк абзацами
    #38353582
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
br, наверняка берет свое начало в консолях, которые были задолго до веба.

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

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

Что значит паттерн "r?" - это оно самое - выкинуть все \r прежде чем менять \n
...
Рейтинг: 0 / 0
Заменить переносы строк абзацами
    #38353621
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerЧто значит паттерн "r?" - это оно самое - выкинуть все \r прежде чем менять \nэтот регекс будет искать все "\n". Если перед "\n" окажется "\r" (виндовый случай "\r\n"), то он при замене уйдет вместе со своим "\n".
...
Рейтинг: 0 / 0
Заменить переносы строк абзацами
    #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
Заменить переносы строк абзацами
    #38353625
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,

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

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

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

А надо так, чтобы если нет переноса в строке - то и ничего с ней, а если есть, то заменить на абзацы. Стало быть нечетный на p, четный на /p
...
Рейтинг: 0 / 0
Заменить переносы строк абзацами
    #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
Заменить переносы строк абзацами
    #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
Заменить переносы строк абзацами
    #38353653
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

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

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

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

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

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

Подумал может вы последовательность с символом перепутали. Последовательность разрешена, хоть стопицот раз \n\n\n впишите куда угодно.
...
Рейтинг: 0 / 0
Заменить переносы строк абзацами
    #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
18 сообщений из 18, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Заменить переносы строк абзацами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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