2

我正在尝试将@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*/...

目前,我得到了 min-width 和它之后的所有内容(直到样式表的末尾):

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

并通过在媒体查询末尾找到双“}}”来获取媒体查询的终点,如下所示:

/}[^{]*}/

这可行,但它需要两个正则表达式和一些字符串操作来制作每个 IE 样式表,这让我觉得很脏。

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

那么有人可以告诉我如何将这两种表达方式合二为一吗?

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

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

4

2 回答 2

1

我忘记了这个问题:-),但万一有人感兴趣:

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

成功了(几乎)。它在http://regexpal.com/上完美运行,但在 IE<9 中,匹配在末尾得到“} }, , ,} }”而不是“}}”。

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

于 2013-07-01T15:27:58.830 回答
0

如果您可以假设您想要的最后一行只是“}”,那么这将是:

 /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);
于 2012-12-11T20:19:37.697 回答