当段落以引号使用Javascript结束时,将段落拆分为句子

时间:2014-08-07 17:08:24

标签: javascript regex

我试图使用Javascript正则表达式将整个段落分成句子。

段落:

I visited a bar in Kansas. At the entrance I see, "Welcome to the bar!" While leaving that place I see message, "Good night!" I wondered how they changed the name.

我想将上一段分成句子。

  1. 我参观了堪萨斯州的一家酒吧。
  2. 在入口处,我看到,"欢迎来到酒吧!"
  3. 离开那个地方时,我看到了消息,"晚安!"
  4. 我想知道他们是怎么改名的。 (&#34;晚安之间有一个换行符(<br>)!#34;我想知道如何......)
  5. 目前我正在使用正则表达式

    var reg= /(\S.+?[.!?"'] | [.!?] + ["'!.?])(?=\s+[A-Z]|[^<br>]|$)/g;
    

    但它没有将换行符(<br>)视为单独的句子。它正在将这些词分成

    1. 我参观了堪萨斯州的一家酒吧。
    2. 在入口处,我看到,&#34;欢迎来到酒吧!&#34;
    3. 离开那个地方我看到了消息,&#34;晚安!&#34;我想知道他们是怎么改名的。
    4. 要创建换行符,需要输入Shift + Enter键。

1 个答案:

答案 0 :(得分:1)

我不确定我到底知道你需要什么,但这个正则表达式应该可以解决这个问题

var re = /(\w[^.!?]+[.!?]+"?)\s?/g;

您可以看到matches here(请注意正则表达式右侧的全局g)。我相信它可以根据你的需要正确分割比赛。如果有问题,请告诉我。

代码应该是(直接来自http://regex101.com

var re = /([^.!?]+[.!?]"?)\s?/g; 
var str = 'I visited a bar in Kansas. At the entrance I see, "Welcome to the bar!" While leaving that place I see message, "Good night!"\nI wondered how they changed the name.';
var m;

while ((m = re.exec(str)) != null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}