Javascript正则表达式 - 匹配句子并忽略引用完全停止

时间:2017-02-04 15:00:14

标签: javascript regex string split match

正则表达式:

(?:(?:Jr|Master|Mr|Ms|Mrs|Dr|Capt|Col|Sgt|Sr|Prof|Rep|Mt|Mount|St|Etc|Eg)\.\s+|["'“(\[]?)(?:\b(?:(?!(?:\S{1,})[.?!]+["']?\s+["']?[A-Z]).)*)(?:(?:(?:Jr|Master|Mr|Ms|Mrs|Dr|Capt|Col|Sgt|Sr|Prof|Rep|Mt|Mount|St|Etc|Eg)\.\s+(?:(?!\w{2,}[.?!]['"]?\s+["']?[A-Z]).)*)?)*(?:(?![.?!]["']?\s+["']?\w).)*(?:[.?!)\]]+["'”]?|[^\r\n]+$)

可以看到regex101 here

可视化节点图:https://regexper.com(输入正则表达式字符串)

此正则表达式来自Sitepoint讨论with an explanation here

目标:不仅要通过。?!来匹配句子,还要确定何时这样做,例如在引用之外,而不是用缩写来破坏句子。

主要问题

有一个主要问题,如下所示的字符串在它们不应该的时候在中间分裂,我需要引号保持完整。

  

问题:“这是一个问题。你听到了吗?”

除此之外,这个正则表达式是否可靠且高效?

可能还有其他两个问题,或“例外”(见上文regex101):

  

可能的问题/例句(由于“先生”而未正确分割):   2月20日,X先生说“超越第四道墙,应该有'光'”?!......或者其他东西。第二句话。第三

  

可能的问题/例外(“真的吗?”不应该在大写名字之前拆分?:“真的吗?”贝克先生问道,他继续思考。

我打开这个帖子时遇到的以前的问题我已修复,是:

  

在一个字母之后,文字没有拆分,然后是一个标点符号,并且在一个新句子之前进行了句号。 (例如A.S.A.P!新行。)

     

在报价后出现完整停止时,文本没有拆分。

     

句子开头的缩写会破裂。 (例如,蒂莫西中士。)

     

没有结束标点符号的新行未匹配。

您对此实施有何看法?谢谢!

1 个答案:

答案 0 :(得分:1)

尝试用

找到句子
(([0-9]+(\.[0-9]+)?[,;]?|([A-Z][bcdfghjklmnpqrstvwxyz]*\.)+[,;]?|[A-Za-z][a-z']*[,;]?)+(\s+|\.|[!?]))+

编辑:这是我最接近的。