这是一个textarea,用户在其中写入一些文本。我已经写了一个例子。
<textarea id="text">First sentence. Second sentence? Third sentence!
Fourth sentence.
Fifth sentence
</textarea>
正则表达式中已考虑的要求
缺少要求(我需要帮助)&lt;&lt;
每个新行应该由一个空数组项表示。如果应用正则表达式,则应该是响应:
["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);
有什么想法吗?谢谢!
答案 0 :(得分:2)
我简化了很多,要么匹配一行(新行)的末尾,要么是一个句子后跟标点符号:
var tregex = /\n|([^\r\n.!?]+([.!?]+|$))/gim;
我也相信多行的m
标志很重要
答案 1 :(得分:1)
您可以使用以下正则表达式:
/((?:\S[^\.\?\!]*)[\.\?\!]*)/g
让我们打破这个:
“ g ”用于全局匹配的标志,表示在第一次出现后保持匹配
从内到外,(?:)是一个分隔符,允许我们对表达式进行分组,但是从输出中丢弃匹配的结果。我们匹配的 \ S (非空白)不包含句点,问号或感叹号。
您声明要保留此标点符号,因此匹配后的下一部分 [。\?!] 是一个包含这些相同标点符号的系列,因此它们包含在外部分隔符中。编辑:我为此添加了星号,以包括任何数量的标点符号,或句子末尾没有标点符号。
使用http://www.pagecolumn.com/tool/regtest.htm或类似的Javascript正则表达式测试程序检查匹配的组。