2011-08-24 45 views
1

寫CSS的一種流行方式是像這樣:瘋狂的正則表達式:追加以前CSS選擇器

#report-page aside.sidebar { 
    … 
} 

    #report-page aside.sidebar li { 
    … 
    } 

    #report-page aside.sidebar li a { 
     … 

它變得乏味寫這個。我想嘗試自動化重複的部分。 (一樣都不能少預處理程序解決這個問題,但我不能在這個現有應用中使用它。)

Espresso.app可以插入一個動態文本片段:

<!-- The matched suffix allows you to capture information about the text 
     preceding the insertion point. Specify a regular expression here. --> 
    <matched-suffix>(\s+)(is a vegetable)?</matched-suffix> 

    <!-- The transform-into element is a regex replacement expression, and can use 
    the captured strings from matched-suffix to generate a conditional snippet. --> 
    <transform-into>(?2:\1is a vegetable:\1is fantastic and)</transform-into> 

你能不能幫我寫的正則表達式查找第一個大括號{,並返回該行之前的任何內容,不包括製表符和空格?

回答

1

像LESS這樣的預處理器解決了這個問題,但是我不能在這個現有的應用程序中使用它。

是的,你可以。你的項目/框架不必支持它,你不必重寫整個CSS。

例如scss的語法完全支持css的語法,因此您可以將您的.css文件重命名爲.scss,它只是起作用。之後,您可以開始使用scss語法。

http://sass-lang.com/

的SASS/SCSS工具有一個--watch開關,可以讓你在後臺運行,並自動將您的.scss文件轉換爲.css文件每次文件被修改,而深化發展:

sass --scss --watch file.scss:file.css 

如果你喜歡sass語法,sass帶有一個sass-convert工具,可以轉換的,並cssscsssass格式:

sass-convert --from css --to sass file.css file.sass 

對於你的正則表達式的問題,試試這個:

\s*([^\s].*?)\s*{ 

這之前和之後選擇與選擇器匹配,沒有空格/縮進。

+0

SASS使用Espresso的自動完成和語法高亮顯示功能。爲了減輕這種壓力,Espresso的擴展很快就寫下來了。 –

+0

您是否嘗試過使用SCSS? – arnaud576875

+0

耶,這工作。但是,如何反轉它,以便找到*最後*發生,而不是第一個? –

0
^[^{]+ 

此正則表達式匹配從行首開始的所有文本,直到第一個打開的大括號。它將匹配沒有大括號的線上的整行;如果這是一個問題,請在末尾添加文字花括號。

^[^{]+\{