2011-08-22 73 views
4

我需要快速添加前綴到我所有的類和ID的,它是一個很大的CSS文件。我在想一個快速的正則表達式字符串,但到目前爲止我失敗了。有任何想法嗎?有一種快捷的方式爲所有CSS類和ID添加前綴?

我已經試過喜歡簡單的事情:

\#([A-z0-9]+) { 

,這將讓我替換#prefix_ $ 1,但它並沒有考慮到:

#id { 
#id.class 
#id, 

等我不能只需要替換所有#[a-z0-9],因爲它會嘗試抓取背景色等等。

我還需要替換所有的類,這對我來說更令人困惑。

+0

正則表達式不是一個CSS解析器,所以如果你在其中找不到一個真正的嚴格字符串模式,你將會失敗並返回正則表達式,如果你不共享你的整個CSS,這並不容易。也許重命名HTML內的類比在CSS內重命名更容易? – hakre

+0

@hakre我仍然需要重命名類和ID以保持樣式。 –

回答

1

你可以搜索:

\.(-?[_a-zA-Z]+[_a-zA-Z0-9-]*)[^}]+{

\#(-?[_a-zA-Z]+[_a-zA-Z0-9-]*)[^}]+{

應該找到你所有的類名和ID名

隨着RegExr,使用此:

(?<=#|\.)(-?[_a-zA-Z]+[_a-zA-Z0-9-]*)(?=[^}]+{)

編輯: 下面是一個測試的鏈接在谷歌的CSS http://regexr.com?2ugv1

+0

其中還會匹配'背景:#FFF024;' –

+0

調整好了,應該現在好吧 – Rob

+0

還是-1,還會匹配{,導致css失去花括號。 –

-1

我會像這樣的東西去:

/([#\.])([^\d][a-z0-9-_]+)/ Replace with 
$1PREFIX_$2 

但是要注意,它會趕上的色彩以及(如果有做小寫字母)我正在處理一個解決方法。

+0

-1,也會替換'ul li:在{content:「#id.class {」;}' – hakre

1

你可以試試這個[#|\.][\w]+\.?([\w\-]+\s?)它的工作對這些

#id { 
#id.class { 
#id, #otherId { 
#class-dashed 
#class_dashed 
ul li:after {content: " #id.class { ";} 
.class {background-color:  #fff250} 
#id.class {color:#ff} 

還發現了一個很好的tool玩弄不同的選項。顏色仍然存在問題,但由於它們遵循與ID相同的規則,因此無法真正擺脫這種情況。

更新 從結果中排除:從不匹配的顏色。

(?<![: ])[#\.][\w]+\.?([\w-]+\s?)你需要一個正則表達式引擎來支持消極的後視,不是那種熟悉php,所以不知道它是否有它,但我會想象它。

+0

之後''''''''''裏面不需要'|'。此外,在##虛線上失敗,這是完全有效的。此外,捕獲'{'並將其刪除。使用您自己的工具進行測試。 –

+0

-1,也會替換'ul li:{content:「#id.class {」;}' – hakre

+0

@hakre:true - updated。 –

相關問題