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

用于将文本拆分为句子并保留分隔符的Javascript RegExp,javascript,regex,sentence,Javascript,Regex,Sentence,我试图使用javascript的拆分来从字符串中提取句子,但保留分隔符例如 到目前为止我有 sentences = text.split(/[\\.!?]/); 有效,但不包括每个句子的结尾标点(.!?) 有人知道这样做的方法吗?试试这个:- sentences = text.split(/[\\.!\?]/); ?是正则表达式中的特殊字符,因此需要转义 对不起,我没有读到你的问题-如果你想保留分隔符,那么你需要使用matchnotsplit请参见你需要使用match not split 试

我试图使用javascript的拆分来从字符串中提取句子,但保留分隔符例如

到目前为止我有

sentences = text.split(/[\\.!?]/);
有效,但不包括每个句子的结尾标点(.!?)

有人知道这样做的方法吗?

试试这个:-

sentences = text.split(/[\\.!\?]/);
是正则表达式中的特殊字符,因此需要转义


对不起,我没有读到你的问题-如果你想保留分隔符,那么你需要使用
match
not
split
请参见你需要使用match not split

试试这个

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);

以下是拉里答案的一个小补充,它也将匹配偏执的句子:

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!!!"]

对mircealungu的回答稍加改进:

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

改进Mia的答案这里有一个版本,其中还包括没有标点符号的结尾句:

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

也是RegExp中的一个特殊字符,因此您需要对其进行转义,例如
等元字符在字符类中会失去其特殊含义。匹配点(
)、感叹号(
)或问号(
)的正确方法是
[.!?]
。标点字符类
[.!?]
后缺少
+
,因此它不会捕获“他移动”后的三个感叹词。您可以使用拆分:
text.split(/\b(?![\?\?\!))/);\b告诉它在单词边界上拆分,有趣的部分是负前瞻。正则表达式是错误的。如果我键入:“短语1.短语2.短语3”,“短语3”会被扔掉。当最后一个句子结尾没有标点符号时,这里有一个变体也会起作用:
var result=str.match(/([^\.!\?]+[\.!\?]+)|([^\.!\?]+$)/g)var str=“我喜欢海龟……是吗?太棒了!哈哈哈。哈哈!!!发生了什么事??”
当使用浮点数时,这会中断:
Lorem Ipsum来自“de Finibus Bonorum et Malorum”的第1.10.32节和第1.10.33节。
只是一个小提示:像
这样的特殊字符不需要在字符类(方括号)中转义。是否支持