2012-08-01 66 views
13

我正在嘗試使用JavaScript的分割來獲取字符串中的句子,但保留分隔符例如!?。Javascript正則表達式用於將文本拆分爲句子並保留分隔符

到目前爲止,我有

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

其作品,但不包括對每個句子結束標點符號(!?)。

有誰知道一種方法來做到這一點?

+1

'? '也是RegExp中的一個特殊字符,因此您需要將其轉義 – rgvcorley 2012-08-01 14:37:44

+3

像'.'和'?'這樣的元字符在字符類中失去了特殊的含義。匹配點('.'),感嘆號('!')或問號('?')的正確方法是'[。!?]'。 – 2013-05-12 07:14:31

回答

38

您需要使用匹配不分裂。

試試這個。

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

邪惡!非常感謝。 – daktau 2012-08-01 14:50:28

+1

你可以使用分割: 'text.split(/ \ b(?![\?\。\!])/);' \ b告訴它在字邊界上分割,漂亮的部分是否定的外觀-先。 – bavo 2015-12-06 23:35:54

+2

正則表達式是錯誤的。如果我輸入:「短語1.短語2.短語3」,「短語3」會被扔掉。 – 2017-02-05 00:57:17

5

試試這個: -

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

?是在正則表達式特殊字符所以需要進行轉義。

對不起,我錯過讀您的問題 - 如果你想保留分隔符,那麼你需要使用match沒有split看到this question

+2

只是一個小提示:像'?'這樣的特殊字符不需要在字符類(方括號)內轉義。 – JoeRocc 2016-05-06 16:58:39

6

下面是一個小除了拉里的回答也將匹配paranthetical句子:適用於

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

任何想法如何調整這個十進制數?例如。 「在那裏,他移動了99.9%!!!」 – 2015-09-28 00:52:30

+1

您錯過了標點符號字符類'[。!?]'後面的'+',所以在「他移動」之後它不會捕獲到三個感嘆號。 – Mogsdad 2015-09-28 23:56:08

相關問題