使用jquery从基于棘手的正则表达式模式的内容中获取子字符串

时间:2012-03-04 11:24:46

标签: jquery regex jquery-selectors

我有一个段落,我希望段落的第一部分超过100个字符,不到150个字符,我找到'。' (句末)。所以基本上我想要获得超过100个字符和150以下的文本,但不要在句子中间剪切它。我需要用Jquery做这个。

e.g。

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

1 个答案:

答案 0 :(得分:0)

这应该适合您,但您应该发布您的代码,以便我们可以看到我们正在使用的内容

// 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上剪切字符串1}},或者只是在没有匹配的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)