我正在嘗試使用JavaScript的分割來獲取字符串中的句子,但保留分隔符例如!?。Javascript正則表達式用於將文本拆分爲句子並保留分隔符
到目前爲止,我有
sentences = text.split(/[\\.!?]/);
其作品,但不包括對每個句子結束標點符號(!?)。
有誰知道一種方法來做到這一點?
我正在嘗試使用JavaScript的分割來獲取字符串中的句子,但保留分隔符例如!?。Javascript正則表達式用於將文本拆分爲句子並保留分隔符
到目前爲止,我有
sentences = text.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);
試試這個: -
sentences = text.split(/[\\.!\?]/);
?
是在正則表達式特殊字符所以需要進行轉義。
對不起,我錯過讀您的問題 - 如果你想保留分隔符,那麼你需要使用match
沒有split
看到this question
只是一個小提示:像'?'這樣的特殊字符不需要在字符類(方括號)內轉義。 – JoeRocc 2016-05-06 16:58:39
下面是一個小除了拉里的回答也將匹配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!!!"]
任何想法如何調整這個十進制數?例如。 「在那裏,他移動了99.9%!!!」 – 2015-09-28 00:52:30
您錯過了標點符號字符類'[。!?]'後面的'+',所以在「他移動」之後它不會捕獲到三個感嘆號。 – Mogsdad 2015-09-28 23:56:08
'? '也是RegExp中的一個特殊字符,因此您需要將其轉義 – rgvcorley 2012-08-01 14:37:44
像'.'和'?'這樣的元字符在字符類中失去了特殊的含義。匹配點('.'),感嘆號('!')或問號('?')的正確方法是'[。!?]'。 – 2013-05-12 07:14:31