2013-12-19 14 views
4

我有一個字符串,我需要將其拆分爲段落。我可以使用.split('. ')輕鬆做到這一點,並附加'。'字符到每個字符串 - 然後我有一個句子的數組。例如遇到問題,因爲字符串可能具有縮寫中間名的名稱 - 例如John D. Doe。基於前面的連續字符,'。'上的Javascript斷開字符串

如果它不是Javascript,我會使用lookbehind,但它是我不能。

如何將字符串拆分爲一組句子,由兩個或多個字母數字字符和全部停止符分隔?

認爲這將工作 - .split(/(?:\w{2}\.)\s/g) - 但它不包括在比賽中的分隔符,而是我失去了最後的字符和每個拆分句子fullstop。

+4

什麼樣的句子「我去拉什莫爾山」 ? – Aioros

+0

是的。同樣的情況 - 不允許進行雙字母截斷。謝謝 – Nathan

+0

一個稍微不同的方法是檢查,而不是如果你的話與一個。以大寫字母開頭。 –

回答

-1

我認爲你可以在段落末尾使用\n而不是.。通過這種方式,您可以輕鬆拆分它們,而不必擔心可能會在文字中使用的字符之間的衝突。

+1

如果我遵循你所說的話 - 原文是單個字符串,所以\ n不存在。 – Nathan

+0

您可以識別'結束'。使用正則表達式測試的模式,其中end是包含多個字符的單詞。通過這個你會發現每句話的結尾。 –

0

如何將字符串拆分爲一組由兩個或更多個字母數字字符和全停止符分隔的句子?

如果這是唯一的約束,你可以match這樣的模式:

/.*?\w{2,}\./g 

然而,這並不能解決中提到的「拉什莫爾山」和「窈窕奶爸」的問題評論。

使用match而不是split在這裏是關鍵,所以你不需要向後看。

http://jsfiddle.net/6tnQ3/

1

您可以通過扭轉你的字符串和正則表達式後面模仿的外觀和使用的預計。參考文獻:http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

String.prototype.reverse = function() { 
    return this.split('').reverse().join(''); 
}; 
var string = "John D. Doe and Mrs. DoubtFire went to Mt. Washington on 25 Feb. 1999. Another sentence."; 
var newString = string.reverse().split(/\s(?=\.\w{4})/).map(function(a){ return a.reverse(); }).reverse(); 

編輯:您可以在陣列上需要另一個.reverse()太或你的句子會以錯誤的順序

+0

使用'match'而不是'split'會更簡單,那麼就不需要lookbehinds。 –

+0

是的,但這適用於「拉什莫爾山」和「懷疑夫人」問題。 – Synthetx

+0

但它造成了一個新問題。嘗試使用一個字符串,例如「我不確定你在找什麼,這會產生另一個問題。」 –