在捕获组中匹配任何内容(包括换行符)的正则表达式

3
我有一些文本(其中一些人会认为这是幸运文件的一部分)。
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中使用它。

你想要什么输出? - Duc Filan
2个回答

1
尝试一下这个,
str.split(/\n%\n/)

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

0
为匹配换行符,您可以使用[^][\s\S]。点不匹配。这与m标志无关,该标志与锚点(^$)是否在行的开头和结尾匹配有关。其他正则表达式引擎具有使点匹配换行符的语法,并且正在为未来的JS版本提出一个建议,但暂时您必须使用上述方法之一。 [^]字面意思是“匹配任何不是空的字符”,结果包括换行符; [\ s \ S] 字面意思是“匹配任何空格或非空格字符”,也包括换行符。
假设您的正则表达式目前正常工作,除了这个换行问题,请使用
(?<=%\n)([^]*?)(?=\n%)

请参考这个Stack Overflow问题Eloquent JavaScript中有一些相关信息。TC39提案(关于新的s标志)在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接