Javascript基于前面的连续字符打破'。'上的字符串

时间:2013-12-19 09:38:57

标签: javascript regex string

我有一个字符串,我需要分成段落。我可以使用.split('. ')轻松完成此操作,并附加“。” char到每个字符串 - 然后我有一个句子数组。遇到问题,因为字符串可能有缩写中间名的名字 - 例如John D. Doe。

如果不是Javascript,我会使用lookbehind,但事实并非如此。

如何将字符串拆分成一组句子,由两个或多个字母数字字符分隔,后跟一个句点?

认为这样可行 - .split(/(?:\w{2}\.)\s/g) - 但它不包括匹配中的分隔符,而是从每个分句中丢失最终的char和fullstop。

3 个答案:

答案 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是关键所在,因此您不需要外观。

http://jsfiddle.net/6tnQ3/

答案 2 :(得分:-1)

我认为您可以在段落末尾使用\n代替.。通过这种方式,您可以轻松地拆分它们,而不必担心可能在文本中使用的字符之间的冲突。