Как обрезать строку после первой строки в абзаце

У меня есть строка, как показано ниже:

XXX:Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur cursus lacus sed
justo faucibus id pellentesque nunc porttitor. Sed venenatis tempor dui, nec mattis dolor
ultrices at. Duis suscipit, dolor sed fringilla interdum, magna libero tempor quam, sed
molestie dui urna sed tellus.

Как я могу добавить ограничение и обрезать строку в первой строке? (используя javascript).

Конечный результат, который я ожидаю, будет следующим:

XXX:Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur...

person Zhen    schedule 08.12.2011    source источник
comment
Итак, вы хотите все до второго пробела после первого периода? Или что-то другое?   -  person Wesley Murch    schedule 08.12.2011
comment
Откуда вы знаете, что составляет первую строку? Количество символов? Что-то другое?   -  person Ken White    schedule 08.12.2011
comment
Мне нужна первая строка абзаца. Обрезать все после первой строки   -  person Zhen    schedule 08.12.2011
comment
Первая строка @Zhen ничего не значит. Как ограничена ваша первая линия?   -  person Alex Turpin    schedule 08.12.2011
comment
@Zhen: Тогда исправьте свой пример, он не соответствует тому, что вы хотите. Согласно вашему комментарию, пример должен заканчиваться на Curabitur cursus lacus sed... Тогда вы хотите разбить символ новой строки \n? Быть конкретными.   -  person Wesley Murch    schedule 08.12.2011


Ответы (7)


Используйте необязательный параметр limit для повышения производительности.

Томалак, его ответ правильный, но если вы действительно хотите соответствовать только первой строке, будет полезно передать необязательный второй параметр limit. Таким образом, вы предотвращаете разделение длинной строки (с тысячами строк) до конца до того, как будет возвращено первое совпадение.

Установив необязательный параметр limit в 1, мы указываем методу возвращать результат, как только будет найдено первое совпадение, в результате чего повышается производительность.

var firstLine = theString.split('\n', 1)[0];

Подробнее о параметре limit например здесь, в документации MDN

person Wilt    schedule 10.05.2016

Если есть фактические возвраты строки, а не просто какая-то автоматическая обертка, вы можете сделать это:

str = str.substr(0, str.indexOf("\n"));

http://jsfiddle.net/f6uBT/

person Alex Turpin    schedule 08.12.2011
comment
Этот ответ должен быть намного эффективнее, чем ответ на один. Конечно... одного если не хватает. :) - person Arek Bal; 05.01.2014
comment
это возвращает пустую строку, если в str нет новой строки. Не уверен, что все этого ждут. - person Romain Vincent; 19.10.2019

Интересная дискуссия о "перенесенном тексте"... Возможно, это скорее проблема HTML, чем проблема javascript...

Возможно, вы действительно хотите ограничить высоту элемента HTML и установить «overflow=hidden». Тогда он будет отображать столько, сколько поместится в одну строку, а остальное скроет. (но вы не получите маленькое "..." в конце)

person Nick Perkins    schedule 31.01.2014

Вы должны использовать эту функцию:

string.split(separator, [limit])

разделитель - символ для разделения [. или \r\n ...] limit - необязательный, int для ограничения максимального количества символов

person Oded BD    schedule 08.12.2011

var str = document.getElementsByTagName("div")[0].innerHTML;

var firstLine = function(input,cutlength,appendtext){
    if(input.length<=cutlength)
        return input;
    return input.substr(0,cutlength) + appendtext;
}


alert(firstLine(str,50,"..."));

редактировать - вот ссылка на скрипку http://jsfiddle.net/a3C86/

person asawyer    schedule 08.12.2011
comment
К вашему сведению, я не проверял наличие новых строк, поскольку пример вопросов не соответствует этому шаблону. - person asawyer; 08.12.2011

person    schedule
comment
Я не уверен, что это не работает, но интуитивно кажется, что это не сработает для текста, перенесенного на следующую строку; только для явных новых строк? - person David says reinstate Monica; 08.12.2011
comment
@David Thomas: Завернуто? Что это обозначает? В строке либо есть разделитель, либо его нет. - person Tomalak; 08.12.2011
comment
Если у вас есть текст в абзаце, он перетекает с одной строки на другую (я всегда предполагал, что это называется «обтекание», но я могу ошибаться); этот текст занимает несколько строк, но в нем нет явного символа новой строки (насколько мне известно, и именно поэтому я сказал Я не уверен...). Если предположить, что абзац был перенесен автоматически, будет ли работать ваш split('\n')? - person David says reinstate Monica; 08.12.2011
comment
@DavidThomas Это разбивается только на \n символов. - person asawyer; 08.12.2011
comment
@DavidThomas Я знаю, что означает перенос слов. Он просто не относится к строкам JavaScript (т. е. не имеет значения в данном контексте). Его представление на экране не отражается в объекте String, поэтому его нельзя разделить. - person Tomalak; 09.12.2011
comment
Таким образом, вы разбиваете всю строку на все вхождения разрыва строки и возвращаете только первый результат. Если у вас есть тысячи разрывов строк, это означает, что он будет соответствовать им всем, прежде чем возвращать какие-либо результаты. Нет ли способа разделить только один раз при первом вхождении со строкой перед совпадением как результат [0] и оставшейся строкой как результат [1]. - person Wilt; 27.03.2014
comment
@Wilt Конечно, если вам небезразличен этот конкретный случай: theString.slice(0, theString.indexOf('\n')) - person Tomalak; 27.03.2014
comment
@Tomalak на самом деле работает только наполовину. Мне нужны обе части результата (как до, так и после индекса, используемого для разделения). Я посмотрел на splice, но он не поддерживает строки :( - person Wilt; 28.03.2014
comment
Вы все усложняете, не так ли? ;) Дважды вызвать слайс (или подстроку). API «делай то, что я имею в виду» еще не изобретено. - person Tomalak; 28.03.2014

person    schedule
comment
Это решение в виде встроенного оператора: var line = str.indexOf(\n) === -1 ? str : str.substr(0, str.indexOf(\n)); - person Kent Butler; 19.07.2019