[英]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.