我有一些文本(你们中的一些人可能会认出它是财富文件的一部分)
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中使用它。
发布于 2016-12-22 09:37:18
尝尝这个,
str.split(/\n%\n/)这将按仅包含%的行拆分字符串。
发布于 2016-12-22 12:48:01
要匹配换行符,可以使用[^]或[\s\S]。点与不匹配。这与m标志无关,后者与锚点(^和$)在行的开头和结尾是否匹配有关。其他regexp引擎具有使点匹配换行符的语法,并且正在为JS的未来版本提出一个语法,但目前您必须使用上面的方法之一。
[^]的字面意思是“匹配任何不是空格的字符”,事实证明,它包括一个换行符;[\s\S]的字面意思是“匹配任何空格或非空格的字符”,也包括一个换行符。
假设除了这个换行符问题之外,您的regexp当前可以正常工作,请使用
(?<=%\n)([^]*?)(?=\n%)参见this SO question。在Eloquent JavaScript中有一些关于这方面的信息。TC39提案(针对新的s标志)是here。
https://stackoverflow.com/questions/41274544
复制相似问题