2012-06-23 40 views
0

这是一个textarea,用户在其中写入一些文本。我已经写了一个例子。正则表达式将单独句子中的长文本拆分为match()

<textarea id="text">First sentence. Second sentence? Third sentence! 
Fourth sentence. 

Fifth sentence 
</textarea> 

在正则表达式已经考虑要求

  • 分离器被包括在数组项
  • 最后一句不一定需要分隔符(它可以与任何字符结尾)
  • 如果一个句子有多个分隔字符,它将包含在数组项中。例如:第二句话?!?应该是[...... “第二句?!?”,...]

缺少需求(我需要这方面的帮助)< <

每个新行应表示为一个空的数组项。如果使用正则表达式,这应该是响应:

["First sentence.", "Second sentence?", "Third sentence!", "", "Fourth sentence.", "", "", "Fifth sentence"] 

相反,我收到这样的:

["First sentence.", "Second sentence?", "Third sentence!", "Fourth sentence.", "Fifth sentence"] 

这是正则表达式和匹配电话:

var tregex = /[^\r\n.!?]+(:?(:?\r\n|[\r\n]|[.!?])+|$)/gi; 
var sentences = $('#text').val().match(tregex).map($.trim); 

任何想法?谢谢!

回答

2

我简化了很多,无论是匹配线(新线)或一个句子,然后标点符号结束:

var tregex = /\n|([^\r\n.!?]+([.!?]+|$))/gim; 

我也相信m标志多是重要

+0

嗨,谢谢!即时通讯测试它与几个场景,但它总是返回一个不必要的数组的最后一个位置的数组项。出于某种原因,它也需要\ t(制表符)作为新行。 – andufo

+0

将'$'改为'\ n'应该修复它。我真的不知道为什么我选择使用'$'在第一个 – matt3141

+0

工作,再次感谢! – andufo

1

你可以使用下面的正则表达式:

/((?:\S[^\.\?\!]*)[\.\?\!]*)/g 

让我们打破这:

”为标志的全球比赛,意守匹配的首次出现

由内而外的工作后,(?:)是一个分隔符,可以让我们团的表情,但放弃输出的匹配结果。我们匹配不包含句点,问号或感叹号的\ S(非空白)。

你说你想保留这个标点符号,所以接下来的部分[。\ ?!]是包含这些相同的标点符号,因此它们包含在外部分隔符中。编辑:我为此添加了星号以包含任何数量的标点符号,或者在句子末尾都没有。

使用http://www.pagecolumn.com/tool/regtest.htm或类似的Javascript正则表达式检查器检查匹配的组。

+0

您好,实际上,该正则表达式不会将\ n转换为空数组项,现在第三个列出的要求根本不起作用:s – andufo

+0

我添加了星号以包含任意数量的标点符号,或者根本没有一个句子的结尾。 –