繁体   English   中英

正则表达式捕获所有内容,包括两个模式之间的新行

[英]Regular expression capture everything including new lines between two patterns

我试图从样式表中拉出@media规则以进行缓存,然后以适当的分辨率将IE <9与JS一起应用。

例如:

.../*default rules*/...
#work-head { background-image: url("/images/work-art-supplies-med.png"); height: 168px; width: 213px; }        

}

@media screen and (min-width : 657px) {


.welcome h1 { border: 0; margin-bottom: 0; text-align: center; }

.welcome p { font-size: 13px; font-size: 1.3rem; }

.../*more rules*/...

}

.../*more rules*/...

目前,我得到的是最小宽度及其后的所有内容(在样式表的最后):

/657px\)(\s|\n)*\{/

并通过以下方式在媒体查询的末尾找到双“}}”来获得媒体查询的终点:

/}[^{]*}/

这可行,但是需要两个正则表达式和一些字符串操作才能制作每个IE样式表,这让我感到很脏。

我试图避免将IE规则分解为单独的文件以使维护更加容易,并且我认为我需要一个正则表达式,以便可以在压缩CSS之前和之后都进行提取(现在可以提取,但是显然远非最佳选择)。

所以有人可以告诉我如何将这两个表达式组合为一个吗?

基本上:如何匹配一个文字或模式与另一个文字或模式之间的所有内容?

另外-这需要在IE <9中工作,所以我认为向前和向后不是选项(?)

我忘记了这个问题:-),但是如果有人感兴趣:

/657px\)(\s|\n)*\{(.|\n)+?(}[^{]*})/

(几乎)做到了。 它可以完美地在http://regexpal.com/上运行 ,但是在IE <9中,匹配项的结尾处是“}} 、、、}}}”而不是“}}”。

无论如何,我都需要对其进行子串处理,所以没什么大不了的,但是我很想听听是否有人知道如何使其在IE中与正则表达式相同。

如果可以假设所需的最后一行只是“}”,则可以这样做:

 /657px\)[\n\r\w\s]*\{[\n\r\w\W]*[\n\r]\}/

我使用phantomjs在您的测试用例上运行以下过滤器:

var fs = require('fs'),
input = fs.open('/dev/stdin', 'r');
var stuff = input.read();
var somestuff = stuff.match(/657px\)[\n\r\w\s]*\{[\w\W]*[\n\r]\}/);
console.log(somestuff);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM