Javascript RegExp用于将文本拆分为句子并保留分隔符

时间:2012-08-01 14:35:18

标签: javascript regex sentence

我正在尝试使用javascript的split来从字符串中获取句子,但保留分隔符,例如!?。

到目前为止我已经

sentences = text.split(/[\\.!?]/);

有效,但不包括每个句子的结尾标点符号(。!?)。

有谁知道这样做的方法?

5 个答案:

答案 0 :(得分:48)

您需要使用匹配而不是拆分。

试试这个。

var str = "I like turtles. Do you? Awesome! hahaha. lol!!! What's going on????";
var result = str.match( /[^\.!\?]+[\.!\?]+/g );

var expect = ["I like turtles.", " Do you?", " Awesome!", " hahaha.", " lol!!!", " What's going on????"];
console.log( result.join(" ") === expect.join(" ") )
console.log( result.length === 6);

答案 1 :(得分:8)

以下是拉里答案的一个小补充,它也将与括号句子相匹配:

text.match(/\(?[^\.\?\!]+[\.!\?]\)?/g);

申请:

text = "If he's restin', I'll wake him up! (Shouts at the cage.) 
'Ello, Mister Polly Parrot! (Owner hits the cage.) There, he moved!!!"

赐:

["If he's restin', I'll wake him up!", " (Shouts at the cage.)", 
" 'Ello, Mister Polly Parrot!", " (Owner hits the cage.)", " There, he moved!!!"]

答案 2 :(得分:5)

请尝试以下方法: -

sentences = text.split(/[\\.!\?]/);

?是正则表达式中的特殊字符,因此需要进行转义。

抱歉,我想念你的问题 - 如果你想保留分隔符,那么你需要使用match而不是splitthis question

答案 3 :(得分:2)

在Mia的答案上,改进了一个版本,该版本还包括不带标点的结尾句子:

string.match(/[^.?!]+[.!?]+[\])'"`’”]*|.+/g)

答案 4 :(得分:0)

mircealungu的回答略有改善:

string.match(/[^.?!]+[.!?]+[\])'"`’”]*/g);
  • 开头不需要括号。
  • 句子中包括'...''!!!''!?'等标点符号。
  • 包括任意数量的方括号和右括号。 [编辑:添加了不同的右引号]