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