2011-08-24 47 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
^[^{]+ 

此正则表达式匹配从行首开始的所有文本,直到第一个打开的大括号。它将匹配没有大括号的线上的整行;如果这是一个问题,请在末尾添加文字花括号。

^[^{]+\{