正则表达式捕获捕获组中的所有内容(包括换行符)

时间:2016-12-22 01:35:10

标签: javascript regex

我有一些文字(你们中的一些人会认为是财富文件的一部分)

A day for firm decisions!!!!!  Or is it?
%
A few hours grace before the madness begins again.
%
A gift of a flower will soon be made to you.
%
A long-forgotten loved one will appear soon.

Buy the negatives at any price.
%

可以看出,它包含单行文本和块文本(如上一次财富所示)。

我目前有一个可以捕获所有单行命运的正则表达式,但是,它并没有捕获多线财富。

(?<=%\n)(.*?)(?=\n%)

我知道有一个/m多行选项,但是,我不希望整个正则表达式启用多行(我没有让它以这种方式工作)。

所以我的问题是:如何在分隔符之间选择多行文本块作为本地捕获组?应该注意的是,我将在JavaScript中使用它。

2 个答案:

答案 0 :(得分:1)

试试这个,

str.split(/\n%\n/)

这会将字符串拆分为仅包含%的行。

答案 1 :(得分:0)

要匹配换行符,您可以使用[^][\s\S]。点与匹配。这与m标志无关,该标志与锚点(^$)在行的开头和结尾是否匹配有关。其他正则表达式引擎具有使点匹配换行符的语法,并且正在为未来版本的JS提出一个,但目前您将不得不使用上述方法之一。

[^]字面意思是“匹配任何并非一无所有的角色”,事实证明,它包括一个换行符; [\s\S]字面意思是“匹配任何空格或空白字符”,其中还包含换行符。

假设您的正则表达式目前无效,除了此换行问题,请使用

(?<=%\n)([^]*?)(?=\n%)

this SO questionEloquent JavaScript中有一些相关信息。 TC39提案(针对新s标志)为here