用jQuery抓取文本字符串的前两个句子(直到第二个点)?

时间:2018-09-07 12:19:58

标签: javascript jquery string text

我有这个HTML(例如-文本的长度可能会有所不同):

$scope.countFilteredItems = function() {
  var filteredItems = $filter('filter')($scope.items, $filterItems(someArgument));

  var count = 0;
  if (filteredItems !== undefined && filteredItems !== null) {
    count = filteredItems.length;
  }

  return count;
};

我想抓住这段文本的前两个句子,并使用JavaScript / jQuery提取它们。此外,我还想提取其余文本并将其放入自己的元素中。

所以基本上我想得出以下结果:

<p>Stockholm is a city in Sweden. Moscow is a city in Russia. Here is Berlin, it's the capital of Germany.</p>

<p>Stockholm is a city in Sweden. Moscow is a city in Russia.</p>

到目前为止,我只能使用以下内容获得文本的第一句:

<p>Here is Berlin, it's the capital of Germany.</p>

结果显示:“斯德哥尔摩是瑞典的一座城市”-也没有点。我也想将其包括在内。

如简介中所述,这些文本是动态的,且长度不同。

如何实现以上目标?

谢谢!

2 个答案:

答案 0 :(得分:1)

一个选项是:

$('#myDiv > p').each(function() {
   var ss = this.textContent.split('.');
   var f = ss.slice(0, 2).join('.');
   var s = ss.slice(2).join('.');

   $(this).text(f);
   $('<p>').text(s).insertAfter(this);
})

http://jsfiddle.net/0xh5ku4f/

答案 1 :(得分:0)

您可以使用函数获取第二个索引处的点,然后在该索引处分割字符串:

let str = "<p>Stockholm is a city in Sweden. Moscow is a city in Russia. Here is Berlin, it's the capital of Germany.</p>"

let index = nthIndex(str, ". ", 2);

let parts = [str.substring(0, index+1)+"</p>" ,"<p>"+str.substring(index+2)]

console.log(parts)

function nthIndex(str, pat, n){
    var L= str.length, i= -1;
    while(n-- && i++<L){
        i= str.indexOf(pat, i);
        if (i < 0) break;
    }
    return i;
}