正则表达式使用 match() 将长文本拆分为单独的句子
Regex that splits long text in separate sentences with 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);
有什么想法吗?谢谢!
我简化了很多,要么匹配一行的末尾(换行符),要么匹配一个后跟标点符号的句子:
var tregex = /'n|([^'r'n.!?]+([.!?]+|$))/gim;
我也相信多行的m
标志很重要
您可以使用
以下正则表达式:
/((?:'S[^'.'?'!]*)['.'?'!]*)/g
让我们分解一下:
"g"代表全局匹配的标志,表示在第一次出现后保持匹配
从内到外工作,(?:) 是一个分隔符,允许我们对表达式进行分组,但丢弃输出中的匹配结果。我们匹配不包含句点、问号或感叹号的 ''S(非空格)。
您声明要保留此标点符号,因此匹配 [.''?!] 之后的下一部分是一个包含这些相同标点符号的系列,因此它们包含在外部分隔符中。编辑:我为此添加了星号,以包含任意数量的标点符号,或者在句子末尾根本没有标点符号。
使用 http://www.pagecolumn.com/tool/regtest.htm 或类似的 Javascript 正则表达式测试器查看匹配的组。
相关文章:
- 拆分文本以每隔n个字符添加一行新行,并注意空格
- 拆分文本节点
- 如何使用tspan拆分Ext.draw.text中的长文本
- jQuery拆分文本
- 计算文本块中的字符数,并将其拆分为两列
- 编写一个代码来拆分字符串“test”,并将Name的值分配给文本框,将ok的值分配到复选框
- 使用 jQuery 将长字符串拆分为文本块
- 拆分襟翼文本动画 Jquery
- 正则表达式使用 match() 将长文本拆分为单独的句子
- 将文本框中用逗号分隔的员工ID拆分为数组,然后处理这些字符串
- 将文本区域拆分为较小的变量
- 将表中的值拆分为不同的文本输入
- JavaScript 拆分字符串 选定的文本删除
- 数组文本或字符串拆分
- 在光标位置上拆分文本区域的文本.(asp.net C#)
- 拆分文本节点在中间
- jQuery:在鼠标点击位置拆分文本
- 使用拆分只拆分文本
- 拆分文本并在jQuery元素中包装每个单词
- Javascript拆分文本