我有一个字符串,我需要分成段落。我可以使用.split('. ')
轻松完成此操作,并附加“。” char到每个字符串 - 然后我有一个句子数组。遇到问题,因为字符串可能有缩写中间名的名字 - 例如John D. Doe。
如果不是Javascript,我会使用lookbehind,但事实并非如此。
如何将字符串拆分成一组句子,由两个或多个字母数字字符分隔,后跟一个句点?
认为这样可行 - .split(/(?:\w{2}\.)\s/g)
- 但它不包括匹配中的分隔符,而是从每个分句中丢失最终的char和fullstop。
答案 0 :(得分: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()或者你的句子顺序错误
答案 1 :(得分:0)
如何将字符串拆分成一组句子,由两个或多个字母数字字符分隔,后跟一个句点?
如果这些是唯一的限制,您可以match
这样的模式:
/.*?\w{2,}\./g
然而,这并不能解决评论中提到的“拉什莫尔山”和“怀疑夫人”问题。
使用match
代替split
是关键所在,因此您不需要外观。
答案 2 :(得分:-1)
我认为您可以在段落末尾使用\n
代替.
。通过这种方式,您可以轻松地拆分它们,而不必担心可能在文本中使用的字符之间的冲突。