получение подстроки из содержимого на основе хитрого шаблона регулярного выражения с помощью jquery - PullRequest
0 голосов
/ 04 марта 2012

У меня есть абзац, и я хочу, чтобы первая часть абзаца содержала более 100 символов и менее 150 символов, где я нахожу '.'(конец предложения).Таким образом, в основном я хочу получить текст длиной более 100 символов и длиной до 150, но не обрезать его в середине предложения.Мне нужно сделать это с Jquery.

например

<p id="post">Content here content here content here content here content here content here. More content</p>

1 Ответ

0 голосов
/ 04 марта 2012

Это должно работать для вас, но вы должны опубликовать свой код, чтобы мы могли увидеть, с чем мы работаем

// get paragraphs, and filter it to match only ones greater than 100 in length
$('p').filter(function(){
  if ($(this).text().length > 100 && $(this).text().length < 150)
    return true
  else
    return false
  // get the `text` of the paragraph, and replace everything after a period after 100 words
}).text().replace(/(.{100,150})\..+$/,'$1')

регулярное выражение: ограничено /, захватить ((...)) любой символ (.) от 100 до 150 раз ({100,150}), затем (экранированный \) ., за которым следует любой символ . один или несколько раз (+), за которым следует конец ($),Который захватывает первые символы вплоть до . от 100 до 150 символов.


Редактировать: Если это полезно для вас ...

Это не совсем то же самоев качестве вопроса, но вместо этого возвращает строку, если она короче значения start, или прерывает ее на . между start и limit, или просто прерывает ее на limit, где нет совпадения.

/**
 * @returns string Text from inside matched element (or concatenated elements)
 *     but cute off after the start, and before the limit on any available `.`
 *     or returns short strings, or cuts off at limit where there is no match
 */
$.fn.cutNicely = function(start, limit){
    var regex = new RegExp( "(.{" + start + "," + limit + "}\\.).+$" )
    return this.text().substr(0,limit).replace(regex,'$1')
}

// usage:
$('p').cutNicely(80,150)
...