Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   подскажите RegExp для замены пустых строк в тексте. (https://javascript.ru/forum/misc/30433-podskazhite-regexp-dlya-zameny-pustykh-strok-v-tekste.html)

mitiya 03.08.2012 23:46

подскажите RegExp для замены пустых строк в тексте.
 
РегЕкспы вызывают у меня взрыв мозга ((

мне нужно заменить в тексте пустые строки которые созданы с помощью
'\n' строки созданные пробелами.
хотел сделать так text.replace(/\n\n/g,'\n \n')
но понял, что во первых это не правильно отработает \n\n\n
а также к примеру "\n " и тому подобные вещи тоже нормально не отработаются.

был бы признателен за регЕксп и по возможности за разжевывание его.

Deff 04.08.2012 00:01

mitiya,
Приведите пару подобных текстов, каждый обрамите в цитату

Dim@ 04.08.2012 00:17

mitiya,
не очень хорошо объяснили ;)
var txt = "\n\n";
var reg = new RegExp("\n","g");
alert(txt.replace(reg, "LOL"));

вот это наверно вам нужно?

mitiya 04.08.2012 00:38

text = '1234\n \n567\n\n89';
alert( text.replace(/\n\n/g,'\n|      |\n'));


первую пустую строку он не заменит, а надо

как сюда вставлять скрипты с кнопкой запустить ?

Dim@ 04.08.2012 00:40

mitiya,
вы хотите снести переводы строк?

mitiya 04.08.2012 00:49

Цитата:

Сообщение от Dim@ (Сообщение 194467)
mitiya,
вы хотите снести переводы строк?

нет. просто я делаю постраничный вывод текста, но я не могу рассчитать
количество символов которое влезет на экран.
Хоть шрифт и моноширинный, но перевод строки вносит путаницу.
Хочу заменить эти пустые строки соответствующим ширине строки (при данном разрешении) количеством пробелов.

но при все этом не не могу быть уверенным в том что эти пустые строки состоят только из '\n\n'. Они так же могут содержать неопределенное количество пробелов или других \n.

Dim@ 04.08.2012 01:00

mitiya,
:blink:
во первых, придеться делать &nbsp - No-Break-Space непереносимый пробел (вроде так называеться - я долго не пользовался) что хреново
во вторых, сайты на разных системах и компах с разным разрешением по разному отображаются что приведет к съезду верстки сайта

Deff 04.08.2012 01:07

mitiya,
Вам наверно нун выводить текст в скрытый postion:fixed;z-index:-1000;overflow-y:auto; div c шириной экрана и нужной высоты
По событию scroll - считать символы уместившиеся в данный рамер блока

mitiya 04.08.2012 01:18

Цитата:

Сообщение от Deff (Сообщение 194472)
mitiya,
Вам наверно нун выводить текст в скрытый postion:fixed;z-index:-1000;overflow-y:auto; div c шириной экрана и нужной высоты
По событию scroll - считать символы уместившиеся в данный рамер блока

я сейчас примерно так и делаю. только скрол не вариант ибо расчет на мобильные браузеры. Я я наполняю див кусочка текста до тех пор пока его высота не будет больше определенного значения. Но это все как-то не элегантно что ли (

Deff 04.08.2012 19:34

Цитата:

Сообщение от mitiya
я сейчас примерно так и делаю. только скрол не вариант ибо расчет на мобильные браузеры. Я я наполняю див кусочка текста до тех пор пока его высота не будет больше определенного значения. Но это все как-то не элегантно что ли (

:) По-моему событие скролл, скроллируемого блока с заранее выставленной высотой - интересней, нежели постоянная проверка при заполнении?
Просто встаавляете строками по триста символов - по событию скролл - отнимаете последнее и вставляете половину 150 - ежели скролла нет - так и оставляем - есть - отнимаем половину добавленного - 75

mitiya 04.08.2012 21:18

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

а вот насчет заполнения по 300 и тд. тут проблема в том что при наличии \n\n все становится очень печально, ибо эти знаки считаются за два, а места занимает как целая строка. Это может и 100 символов и тд.

Deff 04.08.2012 21:57

Цитата:

Сообщение от mitiya
а вот насчет заполнения по 300 и тд. тут проблема в том что при наличии \n\n все становится очень печально, ибо эти знаки считаются за два, а места занимает как целая строка. Это может и 100 символов и тд.

Это пофег - метод последовательного приближения - за каждый цикл уточнет поледнюю строку вдвое ( за 7 повторений точность добавки будет 2 знака(если добавлять по 300 и это нун делать только для последней строки

mitiya 04.08.2012 22:15

что-то я не совсем улавливаю если честно

Deff 04.08.2012 22:25

mitiya,
Вталкиваешь в блок по 300 символов своего текста (заранее установил высоту блока) - при появлении скролла(событие) убираешь последнюю строку и запихиваешт половину - если событие -вновь - опять убираешь и запихивашь половину - за два три цикла -скрола не будет - ти заполнил блок под заязку - запомнил индекс конечного вставленого символа и мон продолжить пихать в очередной блок (или как там у Вас ..

mitiya 07.08.2012 01:22

Цитата:

Сообщение от Deff (Сообщение 194585)
:) По-моему событие скролл, скроллируемого блока с заранее выставленной высотой - интересней, нежели постоянная проверка при заполнении?

а как собственно так сделать ? как мне прервать заполнение по событию ?
как од примерно выглядеть будет ?

Deff 07.08.2012 01:50

Цитата:

Сообщение от mitiya
а как собственно так сделать ? как мне прервать заполнение по событию ?
как од примерно выглядеть будет ?

<div id=Div contenteditable="true" onscroll="alert("Высота заполнена")" style="line-height:90%;border:blue 1px solid;height:100px;width:200px;overflow-y:hidden;overflow-x:visible;">
ecxvvvvvvvvvvv
xcvvvvvvvvvvvvvvvv


</div>



<script type="text/javascript">
document.getElementById('Div').onscroll= function() {alert("A")}
</script>

mitiya 07.08.2012 01:52

да но как я прерву тот скрипт который заполоняет див ?

Deff 07.08.2012 02:00

mitiya,
Вы при каждом втискивании по триста символов(цифра - примерно минимальная строка) - смотрите флаг - который выставляется по оnscroll (я ж описал алгоритм

mitiya 07.08.2012 02:07

Цитата:

Сообщение от Deff (Сообщение 195159)
mitiya,
Вы при каждом втискивании по триста символов(цифра - примерно минимальная строка) - смотрите флаг - который выставляется по оnscroll (я ж описал алгоритм

а чем это отличается от сравнения с высотой дива ?

Deff 07.08.2012 02:38

mitiya,
Хороший вопрос - пока не знаю - Поскольку началось с RegExp для замены пустых строк в тексте.

mitiya 07.08.2012 02:54

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

Deff 07.08.2012 14:02

Цитата:

Сообщение от mitiya
вот вот. я регэкспом хотел привести текст в предсказуемый вид, и выводить столько строк сколько надо. но регэкспа так никто и не подкинул ((

<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>



<textarea id="txt" rows="5">row1

row2
&nbsp; &nbsp; &nbsp;
row3

row4</textarea><br/>
<button id="btn">Click</button>

<script type="text/javascript">
$('#btn').click(function(){
    var str=$('#txt').val();

    str=str.replace(/[\n\r](?:[\s(?:&nbsp;)]*)(?=[\n\r])/g,'');

    $('#txt').val(str);

});
</script>


Часовой пояс GMT +3, время: 06:30.