JS RegEx 将文本拆分成句子

Rac*_*elD 0 javascript regex

我在使用 javascript 的正则表达式时遇到了一些困难;

这是我的小提琴:http : //jsfiddle.net/6yhwzap0/

我创建的函数是:

var splitSentences = function(text) {
    var messy = text.match(/\(?[^\.\?\!]+[\.!\?]\)?/g);
    var clean = [];
    for(var i = 0; i < messy.length; i++) {
        var s = messy[i];
        var sTrimmed = s.trim();
        if(sTrimmed.length > 0) {
            if(sTrimmed.indexOf(' ') >= 0) {
                clean.push(sTrimmed);
            } else {
                var d = clean[clean.length - 1];
                d = d + s;

                var e = messy[i + 1];
                if(e.trim().indexOf(' ') >= 0) {
                    d = d + e;
                    i++;
                }
                clean[clean.length - 1] = d;
            }
        }
    }
    return clean;
};
Run Code Online (Sandbox Code Playgroud)

我得到了非常好的结果,text.match(/\(?[^\.\?\!]+[\.!\?]\)?/g);我的大问题是,如果一个字符串在句点后有引号,它会被添加到下一个句子中。

因此,例如以下内容:

"Hello friend. My name is Mud." Said Mud.
Run Code Online (Sandbox Code Playgroud)

应拆分为以下数组:

['"Hello friend.', 'My name is Mud."', 'Said Mud.']
Run Code Online (Sandbox Code Playgroud)

但它是以下内容:

['"Hello friend.', 'My name is Mud.', '" Said Mud.']
Run Code Online (Sandbox Code Playgroud)

(参见“Said Mud”字符串中的引用)

任何人都可以帮我解决这个问题,或者给我指出一个好的 JavaScript 库,它可以将文本分成段落、句子和单词?我发现blast.js但我使用的是 Angular.js 并且它根本没有很好地集成。

Avi*_*Raj 6

我建议你使用string.match而不是string.split.

\S.*?\."?(?=\s|$)
Run Code Online (Sandbox Code Playgroud)

演示

> var s = '"Hello friend. My name is Mud." Said Mud.'
undefined
> s.match(/\S.*?\."?(?=\s|$)/g)
[ '"Hello friend.',
  'My name is Mud."',
  'Said Mud.' ]
Run Code Online (Sandbox Code Playgroud)