2016-12-04 59 views
1

我想要接收大量文本(例如书籍章节),并创建一个句子数组。JS将文本拆分成句子

我当前的代码是:

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

这仅适用于当文本与之一[结束。 ! ?]。如果最后一句话最后没有标点符号,它就会丢失。

如何将我的文本分成几个句子,允许最后一句没有标点符号?

+0

最后一句是否有换行符? – jstice4all

+0

添加'\ n'即新行 – SaidbakR

+0

\ n仅在文本中没有其他换行符时才起作用,这听起来不太可能。 – JJJ

回答

1

使用$匹配字符串的结尾:

/[^\.!\?]+[\.!\?]+["']?|$/g 

或者,也许你想允许空白字符结尾:

/[^\.!\?]+[\.!\?]+["']?|\s*$/g 
+0

正确!谢谢,但实际上你需要在字符串'''结尾之前允许字符。所以我做了'/ [^ \。!\?] +([\。!\?] + ['']?| $)/ g',但我认为它也可以是'/ [^ \。 ?\] + [\ \] + [“”] |!?。+ $/g' – Mirror318

-1

您可以只使用[^\.!\?]+,你不需要休息:

text = "Mr. Brown Fox. hello world. hi again! hello one more time" 
 
console.log(text.match(/[^\.!\?]+/g))

+0

为什么downvote? – yelsayed

+0

基于他原来的正则表达式,他似乎想要包含句尾标点符号。 – 2016-12-04 17:13:30

+0

我知道,你为什么认为我的正则表达式不这样做? – yelsayed

1

这取决于文本字符,而

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

可以做工作。

(如果没有,你可以提供一些句子,你所无法比拟的什么工作?)

+0

我最终得到了这个,但最后还是在字符串末尾加上'$':'text.match(/[^\.!\?]+[\.!\?]+ | [^\。!\?] + $/g);' – Mirror318

1

取决于你是否需要你的句子的标点符号在你的结果,你可以只使用“拆分”

var txt="One potato. Two Potato. Three"; 
txt.split(/[\.!\?]+/); 
[ 'One potato', ' Two Potato', ' Three' ] 
+0

我试过'split',很好,没有什么会丢失的,但是我确实需要标点符号 – Mirror318