2013-02-08 59 views
2

我試圖使用正則表達式從元素樣式中刪除所有「顏色」樣式,但我失敗了。風格的正則表達式上的JavaScript RegEx

cursor: pointer;background-color: yellow;color: lightgray; 

的風格應該成爲什麼

cursor: pointer;background-color: yellow; 

這是我使用color:[^;]+;

它捕獲的背景色的正則表達式,並刪除部分實例後背景。

+0

請閱讀[regex]標籤:您應該始終精確使用您使用的工具。 – 2013-02-08 18:08:46

+0

我確實包含了正則表達式和正則表達式標籤。 – C3PO 2013-02-08 18:30:40

+0

是的,但你也應該*「包含一個指定你正在使用的編程語言或工具的標籤」*(見標籤描述)。 – 2013-02-08 18:32:05

回答

2

這正則表達式的工作對我來說:

[\s;]color:[^;]+(?=;)|^color:[^;]+; 

你會看到它以不同方式處理,其中顏色是第一個參數的情況。

var style = "cursor: pointer;background-color: yellow;color: lightgray;"; 
var replaced = style.replace(/[\s;]color:[^;]+(?=;)|^color:[^;]+;/g, '') 

需要注意的是,即使使用正則表達式並不壞在這裏,此操作可能會用一個簡單的拆分+過濾更大的信心來完成:

var replaced = style.split(';').filter(function(v){ 
    return v.split(':')[0].trim()!='color' 
}).join(';'); 
+0

如果顏色不是第一個或最後一個元素(因爲它將刪除前導分號和尾隨分號),這是個壞消息。 – 2013-02-08 18:13:07

+0

@ F.J修正了我的想法。 – 2013-02-08 18:14:00

+0

我敢肯定,可以找到一個較短的正則表達式,但來吧,爲什麼2 downvotes? – 2013-02-08 18:20:36

0

在解決一個小更新。

錯誤,解決方案只有一個小問題處理與base64輸入背景圖像。只是想添加正則表達式來分割樣式

arr = s.match(/background-image\s*:\s*url\s*\(\s*data:image[^)]+\)?|[a-zA-Z-]+:[^;]+/gi); 

這應該給你一個包含所有元素的數組。到目前爲止它的工作。