簡體   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