我想要一个匹配段落的正则表达式,例如:
红褐色的狐狸做了些什么。 [换行]我不记得这篇文章。
[换行符]
[换行符] 所以,相反,我会说等等等等。 [换行] Blah。
将返回如下数组:
['The red brown...', 'So instead I'll say...']
我已经有了这个正则表达式(我偷了,嘘):/(?:[^\r\n]|\r(?!\n))+/gm
但是,此模式匹配换行符(一个换行符)和段落符号(两个换行符)。如何匹配段落之间的文本正文,但不能在单个换行符之间拆分匹配?
答案 0 :(得分:1)
您可以使用此正则表达式/(.+)((\r?\n.+)*)/gm
仅捕获可被视为段落的内容。根据您的描述,段落可以包含普通文本和单行换行符。以下示例实现了此解决方案。
// Orignial input
var input = `
The red brown fox, did something.
I don't remember this text
So, instead I'll say blah blah.
Blah.
another paragraph
`;
document.write('<code>ORIGNIAL</code><pre>' + input + '</pre><hr>');
var
regex = /(.+)((\r?\n.+)*)/gm,
matches, output = []; // output is used to store all paragraphs
while (matches = regex.exec(input)) {
output.push(matches[0]);
document.write('<code>PARAGRAPH ' + output.length + '</code><pre>' + matches[0] + '</pre><hr>');
}
pre {
background-color: lightGray;
margin: 2px 0;
}
hr {
border: none;
margin:0;
padding:0;
}
答案 1 :(得分:0)
您可以使用{2,}
limiting quantifier分隔换行符(序列,取决于换行符样式):
var s = "The red brown fox, did something.\r\nI don't remember this text.\r\n\r\nSo, instead I'll say blah blah.\r\nBlah.";
console.log(s.split(/(?:\r\n){2,}/));
因此,/(?:\r\n){2,}/
匹配2个或更多个连续的CR + LF序列。如果换行符样式仅为LF,请使用更简单的/\n{2,}/
模式。