我正在尝试从样式表中提取@media规则进行缓存,然后在适当的分辨率下使用JS在IE< 9中应用。
例如:
.../*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中工作,所以我认为前瞻和后瞻不是选项(?)
答案 0 :(得分:1)
我忘记了这个问题:-),但万一有人感兴趣:
/657px\)(\s|\n)*\{(.|\n)+?(}[^{]*})/
诀窍(差不多)。它在http://regexpal.com/上完美运行,但在IE< 9中,匹配得到“}} ,,,}}”最后而不是“}}”。
无论如何我需要对其进行子串,所以没什么大不了的,但是我有兴趣听听是否有人知道如何让它在IE中以与regexpal相同的方式运行。
答案 1 :(得分: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);