2016-12-04 89 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